Скачиваний:
10
Добавлен:
04.11.2020
Размер:
709.85 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра вычислительной техники

ОТЧЕТ по лабораторной работе №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

Соседние файлы в папке Всякие лабы