Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архітектура!!!.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
245.76 Кб
Скачать
  1. Команди множення в мові Асемблер та використання прапорців для цієї команди

Пояснимо відмінності цих команд на формальних прикладах.

;Множення позитивних чисел із знаком

mov Al,5    ;Первый співмножник дорівнює 5

mov Bl,7    ;Второй співмножник дорівнює 7

mul BL        ;AX=0023h=35

mov Al,5    ;Первый співмножник дорівнює 5

mov Bl,7    ;Второй співмножник дорівнює 7

imul BL       ;AX=0023h=35

Обидві команди, mul і imul, дають в даному випадку однаковий результат, оскільки позитивні числа із знаком збігаються з числами без знаку. Не так йде справа при множенні негативних чисел.

;Множення негативних чисел із знаком

mov Al,ofch     ;Первый сомножітель=252

mov Bl,4             ; Другий співмножник =4

mul BL                  ;AX=03F0h =1008

mov Al,ofch     ;Первый сомножітель=-4

mov Bl,4              ; Другий співмножник =4

imul BL                ;AX=FFFO=-16

Тут дія команд mul і imul над одними і тими ж операндами дає різні результати. У першому прикладі число без знаку Fch, яке інтерпретується, як 252, умножається на 4, даючи в результаті число без знаку 3F0, тобто 1008. У другому прикладі те ж число Fch розглядається, як число із знаком. В цьому випадку воно складає -4. Множення на 4 дає Fff0h, тобто -16.

  1. Команди ділення в мові Асемблер та використання прапорців для цієї команди

DIV - деление беззнаковое

Выполнение операции деления двух двоичных беззнаковых значений.

Синтаксис

div делитель

Алгоритм

Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.

Состояние флагов после выполнения команды

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

?

?

?

?

?

?

Описание

Команда выполняет целочисленное деление операндов с выдачей результата деления в виде частного и остатка от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.

Примеры

mov ax,10234

mov bl,154

div bl ;ah=остаток, al=частное

IDIV - деление целочисленное со знаком

Операция деления двух двоичных значений со знаком.

Синтаксис

idiv делитель

Алгоритм

Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;

Остаток всегда имеет знак делимого. Знак частного зависит от состояния знаковых битов (старших разрядов) делимого и делителя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]