-3

[MSP430 16 位]

0x437c    mov[.b] #-1, r12 

0x926c    cmp[.b] #4, r12 

0x2801    jlo 0xda36

谁能帮我用二进制计算(cmp[.b] #4, r12)?

示例:r12-#4= 1111111111111111 - 0100 @@? 我不知道如何在无符号和有符号的情况下用二进制计算 cmp。

4

1 回答 1

0

有符号和无符号减法之间没有任何变化。改变的是你使用什么样的跳跃:JLO 或 JL。JL 和 JGE 用于有符号比较。JLO 和 JHS 用于无符号比较。因此,在您的情况下,您使用的是无符号比较,并且 jlo 不会跳转到 0xda36,因为 CMP 将设置进位位。请注意,JLO 是 JNC 的别名(如果没有进位则跳转)。

要手动计算减法,您可以将其转换为第一个加数加上第二个加数的一个补码 + 1 的总和。因此,在您的情况下,您有:

  0xFFFF - 0x0004 = 
  0xFFFF + 0xFFFB + 1 =  //carry is set
  0xFFFB
于 2020-11-11T07:56:17.097 回答