Лекции по ассемблеру / лекц_9
.doc
DL BL
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1
0 0 0 0 0 1 0 1
DX
BL
1 1 1 1 0 0 0 0
0 0 0 0 0 1 0 1
0 1 0 1 1 1 1 1
1 1 1 1 1 0 1 1
0 1 0 1 1 1 1 0
DX AX
Рисунок 9.1. Наглядная интерпретация фрагмента программы деления двойного слова на 16
Процесс выполнения деления 2 неупакованных BCD-чисел может быть представлен в формате неупакованных BCD-чисел. Для этого перед операцией деления в регистре АХ получают 2 неупакованные цифры делимого (выполняет эту операцию программист удобным для него способом). Далее командой AAD преобразуется число в двоичное, которое затем является делимым в операции DIV. Причем в дальнейшей операции DIV двоичное число делится на неупакованную BCD-цифру, находящуюся в байтовом регистре или в байтовой ячейке памяти. Результат операции получается так, как описано 1-ой строкой таблицы. Понятно, что с применением этих команд можно выполнять очень простые операции деления, но команду AAD можно использовать и в контексте преобразования упакованного (или неупакованного) десятичного числа из диапазона 00-99 в двоичный эквивалент.
К группе арифметических команд относят команды расширения операнда, которые называются командами преобразования:
Рассмотрев арифметические операции можно сделать следующие выводы:
1) рассмотренная нами группа команд выполняет известные арифметические операции над целыми числами, для работы с вещественными числами применяют команды сопроцессора;
2) многие команды имеют только один операнд или не имеют операндов вообще, поскольку по умолчанию работают с определенными регистрами общего назначения;
3) арифметические операции чувствительны к размерности операндов, поэтому эту характеристику необходимо отслеживать программисту;
4) контроль за правильностью арифметических операций полностью лежит на программисте; программист должен отслеживать состояние арифметических флагов во время вычислительного процесса и принимать правильные решения по дальнейшей обработке;
5) для чисел со знаком установка в 1 флага OF говорит о том, что в результате сложения чисел одного знака результат выходит за границу допустимых значений чисел со знаком в данном формате и сам результат меняет знак (имеет другой знак, чем его операнды).