Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
52.74 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

МЕЖДУНАРОДНЫЙ ИНСТИТУТ ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

Лабораторная работа № 4

По дисциплине «Организация и функционирование ЭВМ»

Выполнил :

студент группы 417217 Гмыза А. А.

Проверил:

Преподаватель Новиков С. О.

Минск 2008

Лабораторная работа №4

«Изучение команд умножения и деления»

Цель работы: изучить форматы и правила работы с командами умножения и деления микропроцессора i8086.

Оборудование: IBM - совместимый персональный компьютер, работающий под управлением операционной системы, совместимой с MS-DOS®.

Программное обеспечение: Программа DEBUG

Краткие теоретические сведения.

  1. Команды умножения:

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) не определено.

  1. Команды деления:

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.

оп1

оп2

*

оп3

/

оп4

+

Таблица 2.

Таблица 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 и команды языка Ассемблера, мы изучили правила работы с командами умножения и деления.

Соседние файлы в папке Лабораторные работы