我在 msp430 的汇编中有以下版本的否定某些整数值(在 R12 中):
inv R12
inc R12
这是根据手册,我认为这会起作用吗?
inv R12
add #1, R12
但这会奏效吗?为什么不呢?:
sub #1, R12
inv R12
对此仍然很陌生,感谢您的帮助!
我在 msp430 的汇编中有以下版本的否定某些整数值(在 R12 中):
inv R12
inc R12
这是根据手册,我认为这会起作用吗?
inv R12
add #1, R12
但这会奏效吗?为什么不呢?:
sub #1, R12
inv R12
对此仍然很陌生,感谢您的帮助!
INC dst
是模拟的ADD #1, dst
,所以前两个版本完全一样。
至于第三个版本:在二进制补码表示中,反转所有位会计算负数减一,因此您正在计算 (−<em>x − 1) + 1 或 −( x + 1) + 1,即确实一样。
如果您想要更实际的演示,只需使用蛮力:
#include <assert.h>
#include <stdint.h>
#include <stdio.h>
int main()
{
for (uint32_t i = 0; i < 0x10000; i++) {
uint16_t input = i;
uint16_t output1 = (~input) + 1;
uint16_t output2 = ~(input - 1);
assert(output1 == output2);
}
puts("it works!");
return 0;
}