|
Когда программа выполняет целое деление со
знаком, возникает
проблема, если делимое - байтовый операнд.Иногда нужно разделить
байтовое значение на байтовое, но команда
деления требует, чтобы
делимое занимало регистр AX.В случае деления со знаком
необходимо, чтобы значение в регистре AX
было правильной копией
числа, представленного в дополнительном
коде.Команда
преобразования байта в слово CBW решает
эту задачу; она берет число
из регистра AL и расширяет его знак в
регистр AH.Таким образом,
если значение в регистре AL положительно,
команда заполняет регистр
AH нулями, если же значение в регистре AL
отрицательно, она
устанавливает в регистре AH все
единицы.Команда CBW загружает в
регистр AX 16=битовое число, равное
значению исходного байта в
регистре AL.В случае деления слов команда преобразования слова в
двойное слово CWD выполняет идентичную
функцию.Команда CWD
расширяет знак слова из регистра AX в
регистр DX.Эти две команды
расширяют операнды до выполнения целого
деления со знаком.
В случае целого деления без знака при тех
же условиях знака уже
не существует, и его не надо расширять в
старшую часть делимого. В
этом случае правильным является заполнение
регистра AH (или
регистра DX) нулями перед делением.
Существует много команд,
которые могут выполнить эту задачу,
включая команду MOV с
непосредственным операндом, или просто
SUBAH,AH
что гарантирует обнуление регистра AH.
|