МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ
(ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
“ Язык ассемблера 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 (разобрать самостоятельно).