Курс лекций по программированию на языке ассемблера. Макурина Т.А. - 20 стр.

UptoLike

Составители: 

20
Команда сравнения
Команда CMP, ; которая обычно используется для изменения состояния флагов, на основании
которых команды передачи управления «принимают решение» передавать или не передавать
управление.
Подобно команде SUB команда CMP вычитает операнд-источник из операнда-приемника и в
зависимости от результата устанавливает или обнуляет флаги. Но в отличии от команды SUB
команда CMP не сохраняет результат вычитания, т.е. не изменяет операнды.
Формат команды
CMP операнд1, операнд2
Команды умножения.
Для умножения чисел без знака предназначена команда
MUL источник
Для умножения чисел со знаком предназначена команда
IMUL источник
где источникрегистр общего назначения или ячейка памяти размером в байт или слово. В
качестве второго операнда команды MUL и IMUL используют содержимое регистра AL (при
операциях над байтами) или регистра AX (при операциях над словами). Произведение имеет
двойной размер и возвращается следующим образом:
Умножение байтов возвращение 16-битовое произведение в регистрах AH (старший байт) и AX
(младший байт).
Умножение слов возвращает 32-битовое произведение в регистрах DX(старшее слово) и AX
(младшее слово)
По завершении исполнения этих команд флаги переноса CF и переполнения OF показывают, какая
часть произведения существенна для операций.
После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения
равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF
и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака
младшей половины. В противном случае они равны 1.
Команда деления
Команда DIV выполняет деление чисел без знака
DIV источник
Команда IDIV выполняет деление чисел со знаком
IDIV источник
где источникделитель размером в байт или слово, находящееся в регистре общего назначения
или ячейки памяти. Делимое должно иметь двойной размер; оно извлекается из регистров AH и
AL (при делении на 8-битовое число) или из регистров DX и AX (при делении на 16-битвое
число). Результаты возвращаются следующим образом:
Если операнд-источник представляет собой байт, то частное возвращается в регистре AL, а
остаток в регистре AH.
Если операнд-источник представляет собой слово, то частное возвращается в регистре AX, а
остатокв регистре DX.
Обе команды оставляют состояние флагов неопределенными, но если частное не помещается в
регистре - приемнике (AL или AX), то МП сообщает об этот как «Прерывание типа 0 (деление на
0).
Переполнение результата деления возникает в следующих случаях:
1. Делитель равен 0
2. При делении байтов без знака делимое без знака делимое пол меньшей мере в 256 раз
превышает делитель.
3. При слов без знака делимое по меньшей мере
в 65 536 раз превышает делитель.
4. При делении байтов со знаком частное лежит вне диапазона от –128 до 127 .
5. При делении слов со знаком частное лежит вне диапазона от –32768 до 32767
                                    Команда сравнения
Команда CMP, ; которая обычно используется для изменения состояния флагов, на основании
которых команды передачи управления «принимают решение» передавать или не передавать
управление.
Подобно команде SUB команда CMP вычитает операнд-источник из операнда-приемника и в
зависимости от результата устанавливает или обнуляет флаги. Но в отличии от команды SUB
команда CMP не сохраняет результат вычитания, т.е. не изменяет операнды.
Формат команды
CMP операнд1, операнд2

                                    Команды умножения.
Для умножения чисел без знака предназначена команда
MUL источник
Для умножения чисел со знаком предназначена команда
IMUL источник
где источник – регистр общего назначения или ячейка памяти размером в байт или слово. В
качестве второго операнда команды MUL и IMUL используют содержимое регистра AL (при
операциях над байтами) или регистра AX (при операциях над словами). Произведение имеет
двойной размер и возвращается следующим образом:
Умножение байтов возвращение 16-битовое произведение в регистрах AH (старший байт) и AX
(младший байт).
Умножение слов возвращает 32-битовое произведение в регистрах DX(старшее слово) и AX
(младшее слово)
По завершении исполнения этих команд флаги переноса CF и переполнения OF показывают, какая
часть произведения существенна для операций.
После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения
равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF
и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака
младшей половины. В противном случае они равны 1.

                                       Команда деления
Команда DIV выполняет деление чисел без знака
DIV источник
Команда IDIV выполняет деление чисел со знаком
IDIV источник
где источник – делитель размером в байт или слово, находящееся в регистре общего назначения
или ячейки памяти. Делимое должно иметь двойной размер; оно извлекается из регистров AH и
AL (при делении на 8-битовое число) или из регистров DX и AX (при делении на 16-битвое
число). Результаты возвращаются следующим образом:
Если операнд-источник представляет собой байт, то частное возвращается в регистре AL, а
остаток в регистре AH.
Если операнд-источник представляет собой слово, то частное возвращается в регистре AX, а
остаток – в регистре DX.
Обе команды оставляют состояние флагов неопределенными, но если частное не помещается в
регистре - приемнике (AL или AX), то МП сообщает об этот как «Прерывание типа 0 (деление на
0).
Переполнение результата деления возникает в следующих случаях:
    1. Делитель равен 0
    2. При делении байтов без знака делимое без знака делимое пол меньшей мере в 256 раз
       превышает делитель.
    3. При слов без знака делимое по меньшей мере в 65 536 раз превышает делитель.
    4. При делении байтов со знаком частное лежит вне диапазона от –128 до 127 .
    5. При делении слов со знаком частное лежит вне диапазона от –32768 до 32767


                                            20