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