【问题标题】:Signed vs Unsigned comparison in LC3/LC4 hardware systemLC3/LC4 硬件系统中的有符号与无符号比较
【发布时间】:2018-06-02 15:06:02
【问题描述】:

我正在创建一个 C 程序,从头到尾模拟一个虚构的 LC4 硬件系统(与著名的 LC3 系统略有不同的版本。我目前正在使用算术逻辑多路复用器处理的比较指令。他们列举如下:

CMP Rs Rt: NZP = signed-CC(Rs-Rt) 0010sss00----ttt
CMPU Rs Rt: NZP = unsigned-CC(Rs-Rt) 0010sss01----ttt
CMPI Rs IMM7: NZP = signed-CC(Rs-SEXT(IMM7)) 0010sss10IIIIIII
CMPIU Rs UIMM7: NZP = unsigned-CC(Rs-UIMM7)

我了解比较两个寄存器中的值与比较寄存器中的一个值和从 LC4 指令中提取的另一个值之间的区别(例如 CMP 与 CMPI)。有人可以准确地向我解释进行有符号与无符号比较(CMP 与 CMPU 或 CMPI 与 CMPIU)的含义,在什么情况下您会这样做,最好举个例子?谢谢!

【问题讨论】:

    标签: c unsigned signed lc3


    【解决方案1】:

    指针或(通常)索引是无符号的。比较两个指针时,不应将这些值解释为二进制补码值。否则,一旦指针越过单词最大值一半的阈值,它将显示为负数,并且在比较中看起来小于该阈值之前的指针。

    另一个例子是无符号定时器或计数器。我们不希望高于单词最大值一半的阈值的值看起来小于该阈值之前的值。

    【讨论】:

    • 谢谢,但我的问题是更多地处理最原始级别的数据,即,如果我正在执行有符号比较___ vs ___或无符号比较___ vs ___,什么类型的数字会我在比较?
    • @J_code,在 C 程序中,您可以将有符号整数值强制转换为 unsigned 以执行无符号比较。或者,您可以将值存储在 unsigned int 变量中,这样就不需要强制转换了。类似地,您可以将无符号值强制转换为int,只要该值小于INT_MAX,或者您可以将值存储在int 变量中,则无需强制转换。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 2015-10-31
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多