问题描述
[MSP430 16位]
0x437c mov[.b] #-1,r12
0x926c cmp[.b] #4,r12
0x2801 jlo 0xda36
有人可以用Binary帮助我进行计算(cmp [.b]#4,r12)吗?
示例:r12-#4 = 1111111111111111-0100 @@? 我不知道如何在无符号和带符号的情况下使用Binary计算cmp。
解决方法
有符号减法和无符号减法之间没有任何变化。所发生的变化是您使用的是哪种跳转:JLO或JL。 JL和JGE用于签名比较。 JLO和JHS用于无符号比较。 因此,在您的情况下,您使用的是无符号比较,并且jlo不会跳到0xda36,因为CMP将设置进位。请注意,JLO是JNC的别名(如果不携带则跳转)。
要手动计算相减,您可以将其转换为第一个加数加上第二个加数1的一个补码之和。因此,在这种情况下,您可以:
0xFFFF - 0x0004 =
0xFFFF + 0xFFFB + 1 = //carry is set
0xFFFB