我正在创建一个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)的意义,在什么情况下你会做什么,最好是用例子?谢谢!
答案 0 :(得分:0)
指针或(通常)索引是未签名的。比较两个指针时,不应将这些值解释为二进制补码值。否则,一旦指针越过一个单词最大值的一半的阈值,它就会显示为负数,并且在比较中看起来会比这个阈值之前的指针小。
另一个例子是无符号定时器或计数器。我们不希望高于单词最大值一半的阈值的值看起来小于此阈值之前的值。