Как правильно суммировать 24-битные числа на ассемблере?
Как правильно суммировать 24-битные числа на ассемблере?
Как правильно суммировать 24-битные числа на ассемблере?
Если имеется в виду ассемблер для 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 еще упрощается - там есть поддержка условного выполнения команд, т.о. необходимость в условном переходе пропадает...