Подготовьте программу, реализующую следующие опера-
Лабораторная работа № 2
Теоретические сведения. Арифметические операции
Команды сложения (ADD и ADC)
Сложение ADD осуществляет сложение первого и второго операндов и результат помещается на место хранения первого операнда.
Формат: ADD reg,{ reg / mem / imd }
Схема: <Операнд 1> <--- <Операнд 2> + <Операнд 1> , где
reg – регистр, mem–память, imd—непосредственное значение.
Сложение с переносом ADC- сложение первого и второго операндов и к результату добавляется значение флага переноса CF=0/1 (бит 0 RF). Результат заносится на место 1-го операнда.
Формат:
ADC reg, {reg / mem / imd }
Схема:
Операнд 1 > <--- < Операнд 1 > + < Операнд 2 > + < CF > RF
Примеры команд:
add al, 76
add al, mem_8
add al, bl
adc ax, DP2+2
adc ax, 122
Команды вычитания ( SUB и SBB )
Все абсолютно аналогично для команд вычитания SUB SBB.
Формат: SUB reg, { reg / mem / imd }
Схема: < Операнд 1 > <--- < Операнд 1 >-< Операнд 2 >
Формат: SBB reg, { reg / mem / imd }
Схема: < Операнд 1 > <--- < Операнд 1 >-< Операнд 2 > - < CF
Команда сравнения ( CMP ).
Команда сравнения операндов CMP аналогична команде SUB, но не производит запись результата. Она используется только для установки флажков в RF перед командами Jmp.
Формат: CMP reg, { reg / mem / imd }
Схема: < Операнд 1 > - < Операнд 2 >
Команды умножения (MUL и IMUL).
Команды умножения осуществляют умножение байтов с получением результата слова и умножения слов, давая в результате двойное слово.
|
|
В бесзнаковом умножении (MUL) флажки CF и OF устанавливаются в 1, если в произведении получен ненулевой старший бит (слово), иначе оба они будут 0.
Если в знаковом умножении (IMUL), старший бит (слово) результата не является расширением знака младшего бита (слова), флажки CF и OF установлены в 1, а в противном случае они равны 0.
Формат: MUL { reg / mem }
Схема:
байт слово
<AX> <--- <AL>*<Операнд> <DX,AX> <--- <AX>*<Операнд>
if <AH>=0 then CF и OF=0 if <DX>=0 then CF и OF=0
Формат: IMUL { reg / mem }
Схема:
байт слово
<AX> <--- <AL>*<Операнд> <DX,AX> <--- <AX>*<Операнд>
if <AH>=0 then CF и OF=1 if <DX>=0 then CF и OF=1
Команды деления (DIV и IDIV).
Команды деления получают целое и остаток. Так как делимое вдвое длиннее частного ,то часто возникает переполнение. При возникновении такой ситуации для рассматриваемых команд флаг OF не взводится , а вызывается прерывание, которое аппаратно обрабатывается . Команды аналогичны MUL и IMUL.
Формат: DIV {reg / mem}
Схема:
байт
<AX> /<Операнд> частное -----> <AL>
|
|
остаток -----> <AH>
if <AL> > FFh then INT 0
слово
<DX,AX> / <Операнд> Частное -----> <AX>
Остаток -----> <DX>
if (р-т>32767) OR (р-т<-32767)
then INT 0
Формат: IDIV { reg / mem }
Схема:
байт
<AX> / <Операнд> частное -----> <AL>
остаток -----> <AH>
if <AL> > FFh then INT 0
слово
<DX,AX> / <Операнд> Частное -----> <AX>
Остаток -----> <DX>
if (р-т>32767) OR (р-т<-32767)
then INT 0
Пример использования команд умножения и деления:
; X,Y,Z и V - слова
mov AX,X ; умножить (X) на Y
IMUL Y ; и запомнить производение в BX:CX
mov CX,ax
mov BX,dx
mov ax,z ; прибавить к произв. в BX:CX
CWD ; расшир. со знаком (Z)
add CX,ax
ade bx,dx
SUB cx,540 ; вычесть 540 из BX:CX
SBB bx,0
mov ax,v ; вычесть (BX:CX) из (V) с расшир.
CWD ; знаком и разделить на (X)
SUB ax,cx ; частное образовать в AX
SBB ax,bx ; а остаток в DX
idiv x ;
<AX> <-----(IV-(x*y+z-540)/x
<DX> <----- остаток
Команды автоувеличения и уменьшения.
Автоматически увеличивают (уменьшают) операнд на единицу.
|
|
INC - команда увеличивает на +1 исходный операнд, а команда
DEC уменьшает на -1.
Формат: INC { reg / mem }
Схема: < Операнд > <--- < Операнд > + 1
Формат: DEC { reg / mem }
Схема: < Операнд > <--- < Операнд > - 1
Команда отрицания (NEG)
Команда "отрицания" NEG - изменяет знак операнда
Формат: NEG { reg / mem }
Схема:
< Операнд > <--- - < Операнд >
Задание
Цель работы - программирование математических формул по индивидуальным заданиям с использованием арифметических команд ассемблера.
Подготовьте и отладьте программы для вычисления простых формул по следующему образцу. Продемонстрируйте работу программы под управлением отладчика TD.EXE .
; Образец программы для выполнения
; Pабота 3 " Системное программирование"
; Выполнил: Ф. И. О. гр. Дата:
; Aрифметические команды
; Вычисление формулы : z=(x+y)*w - w-х/y
DATAS SEGMENT ; данные для вычисления формулы
X DW 7
Y DW 5
W DW 10
Z DW ? ; Получим в результате
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
PROGRAM:
MOV AX,DATAS
MOV DS,AX
MOV AX,X
ADD AX,Y
MUL W
SUB AX,W
MOV Z,AX
MOV AX,X
DIV Y
SUB Z,AX
|
|
MOV BX,Z
MOV AX,4С00H
INT 2H
CODES ENDS
END PROGRAM
Варианты заданий (значения переменных X,Y,W – самостоятельно).
1,21. Подготовьте программу, реализующую следующие операции:
Z = W +(X - Y) / (Y +11).
2,22. Подготовьте программу, реализующую следующие операции:
Z = W/X +(X - Y).
3,23. Подготовьте программу, реализующую следующие операции:
Z = W +(X - 9) -(Y/3).
4,24. Подготовьте программу, реализующую следующие операции:
Z = W * (X - Y) + (Y +11).
5,25. Подготовьте программу, реализующую следующие операции:
Z =(W + 12) -(X - Y)/7.
6,26. Подготовьте программу, реализующую следующие операции:
Z = (W +7)*3/(X - Y).
7,27. Подготовьте программу, реализующую следующие операции:
Z = W/Y +(X -9)/ Y.
8,28. Подготовьте программу, реализующую следующие операции:
Z = W -(X/8 - Y)*(Y/5 -X).
9,29. Подготовьте программу, реализующую следующие операции:
Z = (X - Y)/W + (Y-23).
Подготовьте программу, реализующую следующие опера-
ции: Z = W-(X-45)*3/W +(X - Y).
Дата добавления: 2018-04-05; просмотров: 248; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!