【问题标题】:Clarifications on signed/unsigned load and store instructions (MIPS)对有符号/无符号加载和存储指令 (MIPS) 的说明
【发布时间】:2011-08-29 04:44:43
【问题描述】:

我似乎无法掌握这些东西的概念,即使借助 Google 和我手中的教科书。

按照格式(操作码、rs、rt、偏移)...

  • 在将偏移量添加到地址值之前,是否对偏移量进行签名?还是在扩展前添加?
  • lblbu有什么区别?它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?
  • 为什么 lw 没有未签名的版本?连商店说明都没有……

【问题讨论】:

    标签: assembly mips sign-extension zero-extension


    【解决方案1】:

    lblbu的情况有什么区别?

    “加载字节”指令lblbu 将单个字节加载到 32 位寄存器的最右侧字节中。你如何设置高24位? unsigned 操作会将它们设置为零;签名操作将sign-extend 加载的字节。

    例如,假设您从内存中读取字节 0xFFlbu 将此值 0 扩展为 0x000000FF 并将其解释为 255,而 lb 将其符号扩展为 0xFFFFFFFF,即解释为 -1。

    为什么lw 没有未签名的版本?连店铺说明书都没有……

    另一方面,“加载字”指令 (lw) 将 32 位数量加载到 32 位寄存器中,因此没有歧义,也不需要特殊的签名版本。

    如果您存储的字数少于完整的 32 位字,则您无法处理寄存器中的多余位,除非将它们丢弃(忽略它们)。

    它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?

    我认为这个约定仅适用于加法和减法指令。对于其他指令,signed/unsigned 表示是否进行符号扩展。

    您是否在将偏移量添加到地址值之前对其进行签名扩展?还是在扩展前添加?

    如果偏移量是符号扩展的,那么只有在将其添加到基地址之前才有意义。我认为对 two's complement 算术的回顾会清楚地说明这一点。

    【讨论】:

    • 保存字节sb怎么样?存储前字节符号扩展还是零扩展?
    • @NoName: 既然是存储byte,我觉得应该是零扩展,不然会存储更多信息比一个意思。 (好问题顺便说一句)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多