На главную Назад
Добро пожаловать, уважаемый посетитель!

Когда программа выполняет целое деление со знаком, возникает

проблема, если делимое - байтовый операнд.Иногда нужно разделить

байтовое значение на байтовое, но команда деления требует, чтобы

делимое занимало регистр AX.В случае деления со знаком

необходимо, чтобы значение в регистре AX было правильной копией

числа, представленного в дополнительном коде.Команда

преобразования байта в слово CBW решает эту задачу; она берет число

из регистра AL и расширяет его знак в регистр AH.Таким образом,

если значение в регистре AL положительно, команда заполняет регистр

AH нулями, если же значение в регистре AL отрицательно, она

устанавливает в регистре AH все единицы.Команда CBW загружает в

регистр AX 16=битовое число, равное значению исходного байта в

регистре AL.В случае деления слов команда преобразования слова в

двойное слово CWD выполняет идентичную функцию.Команда CWD

расширяет знак слова из регистра AX в регистр DX.Эти две команды

расширяют операнды до выполнения целого деления со знаком.

 

В случае целого деления без знака при тех же условиях знака уже

не существует, и его не надо расширять в старшую часть делимого. В

этом случае правильным является заполнение регистра AH (или

регистра DX) нулями перед делением. Существует много команд,

которые могут выполнить эту задачу, включая команду MOV с

непосредственным операндом, или просто

 

SUBAH,AH

 

что гарантирует обнуление регистра AH.


 

Mail.ru