Всякие лабы / LabRab_1
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра вычислительной техники
ОТЧЕТ по лабораторной работе №1
по дисциплине «Организация ЭВМ и систем» Тема: «Изучение арифметических команд»
Студентка гр. 6361 |
Чемякина Д.С. |
Преподаватель |
Манирагена В. |
Санкт-Петербург
2017
Цель работы.
Изучить систему команд арифметических операций процессоров семейства 86х80.
Экспериментальные результаты.
Адрес |
Мнемокод |
Двоичный код |
Изменения |
Комментарий |
|
|
1:10100001 (опер. |
регистров |
Правильное |
|
|
|
||
00B1 |
MOV AX, [0029] |
присваивания) |
AХ=100 |
исполнение |
|
|
2:00101001 (рег. АХ) |
|
|
|
|
3:00 |
|
|
00B4 |
ADD AX, [002B] |
1:00000011 (опер. |
АL=B0 |
Правильное |
|
|
сложения) |
|
исполнение |
|
|
2:00000110 (рег. АХ и |
|
|
|
|
адрес) |
|
|
|
|
3 и 4: адрес |
|
|
00B8 |
SUB AX,[002F] |
1:00101011 (опер. |
AL=9C |
Правильное |
|
|
вычитания) |
P=1 |
исполнение |
|
|
2:00101111 (рег. АХ и |
|
|
|
|
адрес) |
|
|
00BC |
MOV BX,[002D] |
1:10001011(опер. |
BL = 41 |
Правильное |
|
|
присваивания) |
|
исполнение |
|
|
2:00011110 (рег. ВХ и |
|
|
|
|
адрес) |
|
|
00C0 |
MUL BX |
1:11110111 (опер. |
АX = 279C |
Правильное |
|
|
умножения) |
|
исполнение |
|
|
2:11100011 (рег. ВХ) |
|
|
00C2 |
CMP DX, 00 |
1:10000011 (опер. |
Z=1 |
Правильное |
|
|
сравнения) |
|
исполнение |
|
|
2:11111010 (рег. DХ) |
|
|
00C5 |
JA 00CA |
1:01110111 (опер. |
|
Правильное |
|
|
условного перехода) |
|
исполнение |
|
|
2:00000011 (адрес |
|
|
|
|
метки) |
|
|
00C7 |
JMP 00E4 |
1:11101011 (опер. |
AX = 279CH |
Правильное |
|
|
безусловного |
|
исполнение |
|
|
перехода) |
|
|
|
|
2:00011011 (адрес |
|
|
|
|
метки) |
|
|
00E4 |
CALL 0054 |
1:11101000(опер. |
|
Корректный вызов |
|
|
Вызова |
|
подпрограммы |
|
|
подпрограммы) |
|
|
|
|
2:01101101 (адрес |
|
|
|
|
подпрограммы) |
|
|
00EA |
MOV AX,4C00 |
1:10111000 (опер. |
AX = 4C00 |
Правильное |
|
|
присваивания) |
исполнение |
|
|
3:01001100 (рег. АХ) |
|
00ED |
INT 21H |
1:11001101 (опер. |
Правильное |
|
|
прерывания) |
исполнение |
|
|
2:00100001 (число 21) |
|
Взаимодействие с пользователем.
После запуска программа последовательно просит ввести 4 числа, с которыми будут произведены расчеты по заданной формуле (рис. 1, 2).
Рис. 1 Далее на экран выводится результат вычисления (рис. 3).
Вывод.
В ходе выполнения лабораторной работы была реализована программа, которая просит ввести с клавиатуры четыре числа и производит арифметические действия с этими числами согласно заданной формуле. Результат вычислений выводится на экран.
Приложение 1. Исходный код.
TITLE LAB1
.Model Small
.STACK 100h
.Data
message1 db 'Enter a: ','$' message2 db 'Enter b: ','$' message3 db 'Enter c: ','$' message4 db 'Enter d: ','$' mNull db '0','$'
m2Null db '00','$' message5 db 'Result: ','$'
formula db 'Var 4: (A+B-D)*C',10, '$'
a dw ? b dw ? c dw ? d dw ?
prov1 db ? prov2 db ? buff db ?
error db 'ERROR $'
.Code
input proc mov ah,0Ah xor di,di
lea dx, [buff] mov [buff], 6 int 21h
mov dl,0Ah mov ah,02 int 21h xor ax,ax mov bx,10
lea si,[buff+2]
metka_2:
mov cl, [si] cmp cl, 0Dh jz endin
cmp cl, '-' jz mt
cmp cl,'0' jb er
cmp cl, '9' ja er
sub cl,'0'
mul bx add ax,cx inc si
jmp metka_2 mt:
mov di,1 inc si
jmp metka_2
er:
lea dx, error mov ah, 09 int 21h
int 20h
endin: cmp di, 1 jz ng
ret
ng: neg ax ret
input endp
output proc xor cx,cx mov bx,10
metka_1: xor dx,dx div bx push dx inc cx test ax,ax
jnz metka_1
mov ah, 02h
loop1: pop dx add dl,'0' int 21h loop loop1
ret output endp
begin:
mov ax, @data mov ds, ax
lea dx, formula mov ah, 09
int 21h
lea dx, message1 mov ah, 09
int 21h call input mov [a],ax
lea dx, message2 mov ah,09
int 21h call input mov [b],ax
lea dx, message3 mov ah,09
int 21h call input mov [c],ax
lea dx, message4 mov ah,09
int 21h call input mov [d],ax
push ax push dx
lea dx, message5 mov ah, 09
int 21h pop dx pop ax
mov [prov1], 0 mov [prov2], 0
mov ax,[a] add ax,[b] sub ax,[d] mov bx,[c] mul bx
cmp dx, 0h ja bol jmp mal
bol:
mov bx,1000 div bx
mov [a], dx ;сохраняет остаток call output ;выводит частное
mov dx,[a] ;для проверки остатка cmp dx,10
jb ch2 cmp dx,100 jb ch1
mal:
call output jmp end1
end1:
mov ax, 4c00h int 21h
ch1:
mov [a],dx lea dx,mNull mov ah,09 int 21h
mov ax,[a] call output jmp end1
ch2:
mov [a],dx lea dx,m2Null mov ah,09 int 21h
mov ax,[a] call output jmp end1
END begin