Лабораторные работы / ЭВМлаба4
.docМИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
МЕЖДУНАРОДНЫЙ ИНСТИТУТ ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Лабораторная работа № 4
По дисциплине «Организация и функционирование ЭВМ»
Выполнил :
студент группы 417217 Гмыза А. А.
Проверил:
Преподаватель Новиков С. О.
Минск 2008
Лабораторная работа №4
«Изучение команд умножения и деления»
Цель работы: изучить форматы и правила работы с командами умножения и деления микропроцессора i8086.
Оборудование: IBM - совместимый персональный компьютер, работающий под управлением операционной системы, совместимой с MS-DOS®.
Программное обеспечение: Программа DEBUG
Краткие теоретические сведения.
-
Команды умножения:
IMUL -- эта команда имеет три формы, различающиеся числом операндов:
-
IMUL источник: источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX:AX или EDX:EAX соответственно.
-
IMUL приемник, источник: источник (число, регистр или переменная) умножается на приемник (регистр), и результат заносится в приемник.
-
IMUL приемник, источник1, источник2: источник 1 (регистр или переменная) умножается на источник 2 (число), и результат заносится в приемник (регистр).
Во всех трех вариантах считается, что результат может занимать в два раза больше места, чем размер источника. В первом случае приемник автоматически оказывается достаточно большим, но во втором и третьем случаях могут произойти переполнение и потеря старших бит результата. Флаги OF и CF будут равны единице, если это произошло, и нулю, если результат умножения поместился целиком в приемник (во втором и третьем случаях) или в младшую половину приемника (в первом случае).
Значения флагов SF, ZF, AF и PF после команды IMUL не определены.
MUL -- выполняет умножение содержимого источника (регистр или переменная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Если старшая половина результата (АН, DX, EDX) содержит только нули (результат целиком поместился в младшую половину), флаги CF и OF устанавливаются в 0, иначе — в 1. Значение остальных флагов (SF, ZF, AF и PF) не определено.
-
Команды деления:
IDIV -- Выполняет целочисленное деление со знаком AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, знак остатка всегда совпадает со знаком делимого, абсолютное значение остатка всегда меньше абсолютного значения делителя. Значения флагов CF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0 — в реальном.
DIV -- выполняет целочисленное деление без знака AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, абсолютное значение остатка всегда меньше абсолютного значения делителя. Значения флагов CF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0 — в реальном.
Индивидуальное задание.
Согласно своего варианта вычислить следующее выражение:
F = (КОН1 оп1 КОН2) оп2 Х оп3 (Y оп4 КОН3)
где
КОН1, КОН2, КОН3 – числовые константы, согласно табл. 1
оп1, оп2, оп3, оп4 – операции сложения, вычитания, умножения и деления согласно табл. 2
X, Y – переменные, тип которых определяется согласно табл. 3
.
КОН1 |
12 |
КОН2 |
1369 |
КОН3 |
3699 |
оп1 |
— |
оп2 |
* |
оп3 |
/ |
оп4 |
+ |
Таблица 3.
-
X
char
Y
int
db 8
dw 16
mov bx,12
sub bx,1369
mov al,[100]
cbw
mul bx
xchg ax,cx
mov ax,[101]
add ax,3699
xchg ax,cx
div cx
Вывод: Используя команды программы DEBUG и команды языка Ассемблера, мы изучили правила работы с командами умножения и деления.