msp430 中的汇编否定

Assembly negation in msp430

我在 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;
}