Ассемблер и программирование для IBM PC



       

ГЛАВА 12. Арифметические операции I: Обработка двоичных данных - часть 4


Беззнаковое Знаковое 11111001 249 -7 00000010 2 +2 11111011 251 -5

Двоичное представление результата сложения одинаково для беззнакового и знакового числа. Однако, биты представляют +251 для беззнакового числа и -5 для знакового. Таким одразом, числовое содержимое поля может интерпретироваться по разному. Состояние "перенос" возникает в том случае, когда имеется пеpенос в знаковый разряд. Состояние "переполнение" возника ет в том случае, когда перенос в знаковый разряд не создает переноса из разрядной сетки или перенос из разрядной сетки проиCXодит без переноса в знаковый разряд. При возникновении переноса при сложении беззнаковых чисел, результат получает ся неправильный:

Беззнаковое Знаковое CF OF 11111100 252 -4 00000101 5 +5 00000001 1 1 1 0 (неправильно)

При возникновении переполнения при сложении знаковых чисел, результат получается неправильный:

Беззнаковое Знаковое CF OF 01111001 121 +121 00001011 11 +11 10000100 132 -124 0 1 (неправильно)

При операциях сложения и вычитания может одновременно возникнуть и переполнение, и перенос:

Ассемблер для IBM PC. Глава 12 266

Беззнаковое Знаковое CF OF 11110110 246 -10 10001001 137 -119 01111111 127 +127 1 1 (неправильно) (неправильно)

УМНОЖЕНИЕ ------------------------------------------------------------

Операция умножения для беззнаковых данных выполняется командой MUL, а для знаковых - IMUL (Integer MULtiplication - умножение целых чисел). Ответственность за контроль над форматом обрабатываемых чисел и за выбор подходящей команды умножения лежит на самом программисте. Существуют две основные операции умножения:

"Байт на байт". Множимое находится в регистре AL, а множи тель в байте памяти или в однобайтовом регистре. После умножения произведение находится в регистре AX. Операция игнорирует и стиpает любые данные, которые находились в регистре AH.

| AH | AL | | AX | До умножения:| |Множимое| После:|Произведение|

"Слово на слово". Множимое находится в регистре AX, а мно житель - в слове памяти или в регистре. После умножения произведение находится в двойном слове, для которого требуется два регистра: старшая (левая) часть произведения находится в регистре DX, а младшая (правая) часть в регистре AX. Операция игнорирует и стирает любые данные, которые находились в регистре DX.




Содержание  Назад  Вперед