我有以下版本的在msp430的汇编中取反一些整数值(在R12中:
inv R12
inc R12
这是根据手册,我认为这也可以一样吗?
inv R12
add #1, R12
但是这行得通,为什么不行? :
sub #1, R12
inv R12
对此还是新手,谢谢您的帮助!
[INC dst
与ADD #1, dst
相似,因此前两个版本完全相同。
对于第三个版本:在二进制补码表示中,将所有位取反将计算负的负一,因此您正在计算(-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;
}