MSP430中的汇编求反

问题描述 投票:0回答:1

我有以下版本的在msp430的汇编中取反一些整数值(在R12中:

inv R12
inc R12

这是根据手册,我认为这也可以一样吗?

inv R12
add #1, R12

但是这行得通,为什么不行? :

sub #1, R12
inv R12

对此还是新手,谢谢您的帮助!

assembly twos-complement msp430 negate
1个回答
1
投票

[INC dstADD #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;
}
© www.soinside.com 2019 - 2024. All rights reserved.