将在 cmp[.b] #4, #-1 之后设置进位标志? [MSP430 16 位]
will carry flag be set after cmp[.b] #4, #-1 ? [MSP430 16 bit]
[MSP430 16 位]
0x437c mov[.b] #-1, r12
0x926c cmp[.b] #4, r12
0x2801 jlo 0xda36
谁能帮我用二进制计算 (cmp[.b] #4, r12 )?
示例:r12-#4= 1111111111111111 - 0100 @@?
我不知道如何在无符号和有符号的情况下用二进制计算 cmp。
有符号和无符号减法之间没有任何变化。改变的是你使用什么样的跳跃:JLO 或 JL。
JL 和 JGE 用于符号比较。 JLO 和 JHS 用于无符号比较。
因此,在您的情况下,您使用的是无符号比较,并且 jlo 不会跳转到 0xda36,因为 CMP 将设置进位位。注意JLO是JNC的别名(不进位则跳转)
要手动计算减法,您可以将其转换为第一个加数加上第二个加数的补数 + 1 的总和。所以在您的情况下,您有:
0xFFFF - 0x0004 =
0xFFFF + 0xFFFB + 1 = //carry is set
0xFFFB
[MSP430 16 位]
0x437c mov[.b] #-1, r12
0x926c cmp[.b] #4, r12
0x2801 jlo 0xda36
谁能帮我用二进制计算 (cmp[.b] #4, r12 )?
示例:r12-#4= 1111111111111111 - 0100 @@? 我不知道如何在无符号和有符号的情况下用二进制计算 cmp。
有符号和无符号减法之间没有任何变化。改变的是你使用什么样的跳跃:JLO 或 JL。 JL 和 JGE 用于符号比较。 JLO 和 JHS 用于无符号比较。 因此,在您的情况下,您使用的是无符号比较,并且 jlo 不会跳转到 0xda36,因为 CMP 将设置进位位。注意JLO是JNC的别名(不进位则跳转)
要手动计算减法,您可以将其转换为第一个加数加上第二个加数的补数 + 1 的总和。所以在您的情况下,您有:
0xFFFF - 0x0004 =
0xFFFF + 0xFFFB + 1 = //carry is set
0xFFFB