我正在创建一个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)是什么意思吗?在什么情况下你会这样做,最好是举个例子?谢谢!
发布于 2018-06-03 00:58:21
指针或(通常)索引是无符号的。比较两个指针时,不应将这些值解释为二进制补码的值。否则,一旦指针超过了单词最大值的一半的阈值,它就会显示为负,并且在比较中看起来会小于该阈值之前的指针。
另一个例子是无符号计时器或计数器。我们不希望超过阈值的单词最大值的一半的值看起来小于该阈值之前的值。
https://stackoverflow.com/questions/50658223
复制相似问题