0

我在 msp430 的汇编中有以下版本的否定某些整数值(在 R12 中):

inv R12
inc R12

这是根据手册,我认为这会起作用吗?

inv R12
add #1, R12

但这会奏效吗?为什么不呢?:

sub #1, R12
inv R12

对此仍然很陌生,感谢您的帮助!

4

1 回答 1

1

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;
}
于 2019-10-05T07:01:04.643 回答