Всякие лабы / LabRab_4
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра вычислительной техники
ОТЧЕТ по лабораторной работе №4
по дисциплине «Организация ЭВМ и систем» Тема: «Изучение команд безусловных переходов»
Студентка гр. 6361 |
Чемякина Д.С. |
Преподаватель |
Манирагена В. |
Санкт-Петербург
2017
Цель работы.
Изучить команды безусловных переходов процессоров семейства 80х86. Необходимо реализовать программу использующие операторы типа «if-then-else» и «case», которая в зависимости от содержания регистров, производит вычисления по заданным формулам. Входные данные поступают с клавиатуры.
Экспериментальные результаты.
Адрес |
Мнемокод |
Двоичный код |
Изменения |
Комментарий |
|
|
1:10100000 (опер. |
регистров |
Правильное |
|
|
|
||
00E6 |
MOV AL, [00A5] |
присваивания) |
AL=1 |
исполнение |
00E9 |
CMP AL, 02 |
1:00111100 (опер. |
|
Правильное |
|
|
сравнения) |
|
исполнение |
00EB |
JE 010F |
1:01110100 (опер. |
IP = 00ED |
Правильное |
|
|
условного перехода) |
|
исполнение |
|
|
2: 00100010(адрес |
|
|
|
|
метки) |
|
|
00ED |
MOV AX,[00A9] |
1:10100001 (опер. |
AX = 5 |
Правильное |
|
|
присваивания) |
|
исполнение |
00F0 |
MOV BX, [00A9] |
1:10100001 (опер. |
BX = 5 |
Правильное |
|
|
присваивания) |
|
исполнение |
|
|
2:11101010 (рег. ВХ) |
|
|
00F4 |
MUL BX |
1:11100111 (опер. |
AX = 25 |
Правильное |
|
|
умножения) |
C = 0 |
исполнение |
|
|
2:11100011 (рег. ВX) |
|
|
00F6 |
MOV [00AF], AX |
1:10100011 (опер. |
|
Правильное |
|
|
присваивания) |
|
исполнение |
00F9 |
MOV AX, [00A7] |
1:10100001 (опер. |
AX = 10 |
Правильное |
|
|
присваивания) |
|
исполнение |
00FC |
MOV BX, [00A7] |
1:10001011 (опер. |
BX = 10 |
Правильное |
|
|
присваивания) |
|
исполнение |
|
|
2: 00101110(рег. ВХ) |
|
|
0100 |
MUL BX |
1:11110111 (опер. |
AX = 100 |
Правильное |
|
|
умножения) |
|
исполнение |
|
|
2: 11100011(рег. ВХ) |
|
|
0102 |
MOV [00AD], AX |
1:10100011 (опер. |
|
Правильное |
|
|
присваивания) |
|
исполнение |
0105 |
MOV AX, [00AF] |
1:10100001(опер. |
AX = 25 |
Правильное |
|
|
присваивания) |
|
исполнение |
0108 |
ADD AX, [00AD] |
1: 00000011(опер. |
AX = 125 |
Правильное |
|
|
сложения) |
|
исполнение |
|
|
2: 00000110(рег. АХ) |
|
|
010C |
JMP 0143 |
1: 11101011(опер. |
IP = 0143 |
Правильное |
|
|
безусловного |
|
исполнение |
|
|
перехода) |
|
|
|
|
2: 00110101(адрес |
|
|
|
|
метки) |
|
|
0143 |
CALL 005D |
1: 11101000(опер. |
|
Корректный вызов |
|
|
вызова |
|
подпрограммы |
|
|
подпрограммы) |
|
|
|
|
2: 00010111(адрес |
|
|
|
|
метки) |
|
|
0146 |
PUSH AX |
1: 01010000(опер. |
|
Правильное |
|
|
помещения в стек) |
|
исполнение |
0147 |
PUSH DX |
1: 01010010(опер. |
|
Правильное |
|
|
помещения в стек) |
|
исполнение |
0148 |
MOV DX, 003C |
1: 10111010(опер. |
DX = 3C |
Правильное |
|
|
присваивания) |
|
исполнение |
014B |
MOV AH, 09 |
1: 10110100(опер. |
AH = 9 |
Правильное |
|
|
присваивания) |
|
исполнение |
014D |
INT 21 |
1:11001101(опер. |
|
Правильное |
|
|
прерывания) |
|
исполнение |
014F |
POP DX |
1: 01011010(опер. |
|
Правильное |
|
|
вытаскивания из |
|
исполнение |
|
|
стека) |
|
|
0150 |
POP AX |
1: 01011000(опер. |
|
Правильное |
|
|
вытаскивания из |
|
исполнение |
|
|
стека) |
|
|
0151 |
MOV AL, [00A6] |
1: 10100000(опер. |
AL = 4 |
Правильное |
|
|
присваивания) |
|
исполнение |
0154 |
CMP AL, 03 |
1: 00111100(опер. |
|
Правильное |
|
|
сравнения) |
|
исполнение |
0156 |
JNE 015D |
1: 01110101(опер. |
IP = 015D |
Правильное |
|
|
условного перехода) |
|
исполнение |
|
|
2: 00000101(адрес |
|
|
|
|
метки) |
|
|
0158 |
JMP 48B9:0000 |
|
|
Переход по адресу к |
|
|
|
|
метке в другом |
|
|
|
|
сегменте |
015D |
CMP AL, 04 |
1:00111100 (опер. |
|
Правильное |
|
|
сравнения) |
|
исполнение |
015F |
JNE 0166 |
1:01110101(опер. |
IP = 0161 |
Правильное |
|
|
условного перехода) |
|
исполнение |
|
|
2:00000101 (адрес |
|
|
0161 |
JMP 48B9:003C |
метки) |
IP = 003C |
Переход по адресу к |
|
||||
|
|
|
|
метке в другом |
|
|
|
|
сегменте |
003C |
MOV AX, [00A9] |
1:10100001 (опер. |
AX = 5 |
Правильное |
|
|
присваивания) |
|
исполнение |
003F |
MOV BX, [00A7] |
1: 10001011(опер. |
BX = 10 |
|
|
|
присваивания) |
|
Правильное |
|
|
2: 00011110(рег. ВХ) |
|
исполнение |
0043 |
ADD BX, 000F |
1: 10000011(опер. |
BX = 25 |
Правильное |
|
|
сложения) |
|
исполнение |
|
|
2: 11000011(рег. ВХ) |
|
|
0046 |
MUL BX |
1: 11110111(опер. |
AX = 125 |
Правильное |
|
|
умножения) |
|
исполнение |
0048 |
JMP 48C1:016D |
2: 11100011(рег. ВХ) |
IP = 016D |
Переход по адресу к |
|
||||
|
|
|
|
метке в другом |
|
|
|
|
сегменте |
016D |
CALL 005D |
1: 11101000(опер. |
|
Корректный вызов |
|
|
вызова |
|
подпрограммы |
|
|
подпрограммы) |
|
|
|
|
2: 11101101(адрес |
|
|
|
|
метки) |
|
|
0170 |
MOV AX, 4C00 |
1: 10111000(опер. |
|
Правильное |
|
|
присваивания) |
|
исполнение |
0173 |
INT 21 |
1: 11001101(опер. |
|
|
|
|
прерывания) |
|
Правильное |
|
|
|
|
исполнение |
Взаимодействие с пользователем.
После запуска программа просит выбрать две из заданных формул (рис. 1 и рис. 2).
Рис. 1
Рис. 2
Далее программа просит ввести параметры R и S, которые будут использованы при вычислении (рис. 3).
Рис. 3 Затем программы выводит на экран результат вычислений (рис. 4).
Рис. 4
Вывод.
В результате выполнения лабораторной работы была реализована программа, которая использует операторы типа «if-then-else» и «case» и в зависимости от содержания регистров производит вычисления по заданным формулам. Результат вычислений выводится на экран.
Приложение 1. Исходный код.
TITLE LAB4 data segment
message1 db 'Enter number S and R: ','$' message2 db 'Choose 1 or 2: ',10, '$' message3 db 'Choose 3, 4 or 5: ',10, '$' space db ' ','$'
minus db '-','$'
zeroMess db ' Devided by zero!', '$'
ex1 db '1) r^2 + s^2',10,'$'
ex2 db '2) (r + s)/(r - s) ',10,'$'
ex3 db '3) r/s + s/r',10,'$' ex4 db '4) r*(s+15)',10,'$'
ex5 db '5) r^2 - r*s + s^2 ',10,'$'
a db ? b db ? s dw ? r dw ? q dw ? qs dw ? qr dw ? sup dw ? som dw ?
buff db ?
error db 'ERROR','$' data ends
code2 segment
assume cs:code2, ds:data, es:code
a1:
;3) r/s + s/r mov ax, 00 mov bx, 00 mov ax, [r] mov bx, [s] cmp ax, 0
jz check2 cmp bx, 0 jz check2 idiv bx mov [q], ax
mov dx, 00 mov ax, 00 mov bx, 00
mov ax, [s] mov bx, [r] idiv bx add ax, [q]
jmp far ptr c2
check2:
jmp far ptr erOut
a2:
;4) r*(s+15)
mov ax, [r] mov bx, [s] add bx, 15 mul bx
jmp far ptr c2
a3:
;5) r^2 - r*s + s^2
mov ax, [r] mov bx, [r] mul bx
mov [qr], ax mov ax, [s] mov bx, [s]
mul bx
mov [qs], ax mov ax,[r] mov bx,[s] mul bx
mov dx, ax
mov ax,[qr] sub ax, dx add ax, [qs] jmp far ptr c2
code2 ends
code segment
assume cs:code, ds:data, es:code2 input proc
push bx push cx push dx
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 pop dx pop cx pop bx ret
ng: neg ax pop dx pop cx pop bx ret
input endp
output proc push bx push cx push dx
xor cx,cx mov bx,10
cmp ax, 0 js otr
cc: metka_1: xor dx,dx div bx push dx