将在cmp [.b]#4,#-1之后设置标志吗? [MSP430 16位]

问题描述

[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