Команда преобразования



Команда преобразования


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


    расширяют операнды до выполнения целого деления со знаком.
 
      В случае целого деления без знака при тех же условиях знака уже
   не существует, и его не надо расширять в старшую часть делимого. В
    этом случае правильным является заполнение регистра AH (или
    регистра DX) нулями перед делением. Существует много команд,
    которые могут выполнить эту задачу, включая команду MOV с
    непосредственным операндом, или просто
 
      SUB   AH,AH
 
      что гарантирует обнуление регистра AH.




Содержание раздела