Сборка отрицания в msp430 - PullRequest
       45

Сборка отрицания в msp430

0 голосов
/ 04 октября 2019

У меня есть следующие версии отрицания некоторого целого значения (в R12) в сборке в msp430:

inv R12
inc R12

это в соответствии с руководством, и я думаю, что это будет работать так же?

inv R12
add #1, R12

Но сработает ли это и почему нет? :

sub #1, R12
inv R12

Еще новичок в этом и спасибо за любую помощь!

1 Ответ

1 голос
/ 05 октября 2019

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;
}
...