Команды умножения и деления




МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

 

 

“ Язык ассемблера IBM PC ”

ЛАБОРАТОРНЫЕ РАБОТЫ

Алещенко А.С.

 

 

Москва


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

 

1. Для установления связи с системой набрать

имя пользователя STUDENT

и пароль (на экране не высвечивается)

S304

2. В директории ASM располагаются файлы, необходимые для работы с языком ассемблера, их можно просматривать и копировать для использования. На диске, выделенном в данной лаборатории (H), следует создавать собственные поддиректории в директории с номером группы, в которых можно располагать собственные файлы, скопированные или вновь создаваемые.

3. Вновь создаваемые файлы можно записывать с использованием любого редактора текстов.

4. Трансляция программы осуществляется набором команды в командной строке

TASM filname.asm (enter)

где filname – любое имя файла,после чего формируется файл с исходным именем filname и расширением.obj

5. Компоновка производится набором команды в командной строке

TLINK filname (enter)

после чего формируются файлы с исходным именем filname и расширениями.exe и.map

6. Выполнение программы производится после вызова файла filname.exe в окне Norton Comander.

7. Отключение окон Norton Comander (и их включение) производится одновременным нажатием Ctrl+O.

 

 


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

Цель работы: освоить программирование линейных участков программ с использованием арифметических команд языка Ассемблера.

 

Справочно-обучающая система ASML.

Справочно-обучающая система ASML содержит необходимую справочную информацию о командах Ассемблера IBM PC, представлении информации, форматах команд и основных конструкциях языка.

Справочно-обучающая система ASML вызывается через кнопку ПУСК или через файл ASML.exe в директории ASM. После запуска работа с окнами системы ASML начинается с нажатия кнопки включения меню программы F9.

 

Арифметические команды языка Ассемблера

1. Команды сложения и вычитания

Операции сложения и вычитания одинаково для знаковых и беззнаковых целых. Используются две формы операндов: байт или слово, причем операнды должны быть одинаковой длины. Операнды могут храниться в регистре или в ОП, но второй операнд может быть непосредственным.

Перечислим команды, относящиеся к группе команд сложения и вычитания:

а) ADD op1, op2; op1:= op1+op2

SUB op1, op2; op1:= op1 – op2

Сложение (вычитание) операндов в дополнительном двоичном коде, результат помещается на место первого операнда, второй операнд не изменяется.

Команда модифицирует регистр флагов FLAGS в соответствии с результатом операции, а именно:

ZF – нулевой рез-т,

SF – знак результата,

PF – флаг четности,

CF, AF – флаги переносов,

OF – флаг переполнения.

Примеры:

ADD AH, 12; AH:= AH + 12 (1Б)

SUB z, BX; z:= z – BX (2Б)

 

б) ADC op1, op2; op1:= op1+op2+CF

SBB op1, op2; op1:= op1 – op2 – CF

Сложение (вычитание) операндов с переносом, образованным предыдущей командой.

Модифицирует флаги аналогично п.(а).

Например, если требуется сложить двойные слова, расположенные в парах регистров

(AX, BX):= (AX, BX) + (CX, DX),

причем AX, CX – старшие байты слагаемых,

BX, DX – младшие байты.

Сложение выполняется двумя командами:

ADD BX, DX

ADC AX, CX

 

в) Специальный случай сложения – изменение операнда на единицу.

INC op; op:= op +1 инкремент

DEC op; op:= op –1 декремент

г) Десятичная коррекция результата предыдущей операции. Это анализ флагов и преобразование результата сложения (вычитания) BCD-кодов. BCD-операнды обрабатываются обычными командами сложения и вычитания, а затем размещается команда десятичной коррекции.

Команда коррекции обрабатывает только однобайтовый операнд, находящийся в AL, поэтому команды десятичной коррекции операнда не имеют (подразумеваемая адресация).

DAA; коррекция после сложения

DAS; коррекция после вычитания.

Например,

ADD AL, y

DAA

SUB AL, DH

DAS

Примечание: BCD-операнды, представленные более, чем одним байтом должны обрабатываться побайтно.

Команды десятичной коррекции модифицирует флаги аналогично п.(а), за исключением флагов AF и OF.

Дополнительные команды

а) Команда сравнения

CMP op 1, op 2; op 1 - op2

Результат нигде не запоминается.

Цель команды – модификация флагов: ZF, SF,PF,CF,AF,OF.

б) Команда изменения знака

NEG op

Операнд может быть байт или слово в регистре или в ячейке памяти.

Пример,

MOV AH, 12

NEG AH; AH:= -12

Если операнд равен нулю, то его значение не изменяется.

Команда модифицирует флаги аналогично п.(а), причем

CF=1, кроме случая, когда операнд равен нулю;

OF=0, кроме случая, когда op=-128 (для 1Б), тогда OF=1, а операнд остается без изменения.

Команды умножения и деления

а) Умножение

MUL op; умножение целых чисел без знака

I MUL op; умножение целых чисел со знаком

Операнд может быть слово или байт в регистре или в ячейке памяти, но не непосредственный операнд.

Команды действуют одинаково:

- для байтов AX:= AL*op

- для слов (DX,AX):= AX*op

 

Команда имеет один операнд, а второй операнд находится в аккумуляторе (подразумеваемая адресация).

Т.к. результат получается удвоенной разрядности относительно сомножителей, то при умножении слов он располагается в стандартной паре регистров (DX,AX), причем DX хранит старшие разряды.

Команды модифицируют флаги:

СF=OF=0, если старшая половина результата AH нулевая или совпадает по знакам.

СF=OF=1, если старшие разряды не нулевые.

 

б) Деление

DIV op; деление целых чисел без знака

IDIV op; деление целых чисел со знаковом

где op – аналогично умножению.

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

Деление слова на байт выполняется по схеме

АН:=АХ mod op (остаток)

AL:=AX div op (частное)

Деление двойного слова на слово

DX:= (DX,AX) mod op

AX:= (DX,AX) div op

Делимое заранее должно быть размещено в аккумуляторе и сдвинуто в сторону младшего байта в АХ или AL соответственно.

Флаги не модифицируются, но может возникнуть ошибка «деление на ноль или переполнение», которая возникает, если делитель нулевой или частное не помещается в соответствующее ему место.

При появлении этой ошибки микропроцессор прекращает выполнение программы.

в) Команды десятичной коррекции после команд умножения AAM и перед командой деления AAD (разобрать самостоятельно).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: