 
        
        Всякие лабы / 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
