Как правильно суммировать 24-битные числа на ассемблере?

Рейтинг: 0Ответов: 1Опубликовано: 21.04.2011

Как правильно суммировать 24-битные числа на ассемблере?

Ответы

▲ 2

Если имеется в виду ассемблер для x86.

Если числа "правильные" - т.е. НЕ БОЛЬШЕ 2^24-1 то можно еще добавить проверку и выставление флага переноса (CF) в зависимости от того, превысило ли значение результата 2^24-1.

например (при работе с 32-разрядными операндами, EAX, EBX - операнды, результат в EAX)

        ADD EAX, EBX;
        TEST EAX, 0x01000000;
        JZ ncarry;
        AND EAX, 0x00FFFFFF;
        STC;
ncarry: ...

как результат - в EAX - "правильное" (обрезанное) 24-битное число, в флаге CF - переполнение при 24-битном сложении (если таковое имело место.

Для 16-разрядных регистров придется модифицировать код. В частности заменить первую команду соответствующей последовательностью команд для сложения и изменить команду TEST: Операнды - AX:BX (BX-младший), CX:DX, результат в AX:BX:

        ADD BX, DX;
        ADC AX, CX;
        TEST AX, 0x0100;
        JZ ncarry;
        AND AX, 0x00FF;
        STC;
ncarry: ...

Для ассемблера процессоров ARM еще упрощается - там есть поддержка условного выполнения команд, т.о. необходимость в условном переходе пропадает...