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

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

ОТЧЕТ по лабораторной работе №3

по дисциплине «Организация ЭВМ и систем» Тема: «Способы адресации»

Студентка гр. 6361

Чемякина Д.С.

Преподаватель

Манирагена В.

Санкт-Петербург

2017

Цель работы.

Изучить способы адресации данных процессоров семейства 80х86. Реализовать программу, сохраняющую два массива чисел, введенных с клавиатуры. В результате программа должна вывести на экран массив, в котором каждому элементу присвоено значение большего из одноименных элементов двух введенных массивов.

Экспериментальные результаты.

Адрес

Мнемокод

Двоичный код

Изменения

Комментарий

 

 

1:10001011 (опер.

регистров

Правильное

 

 

 

00BE

MOV CX, [00B8]

присваивания)

CX = 5

исполнение

 

 

2:00001110 (рег. CХ)

 

 

 

 

3 и 4: адрес

 

 

00C2

MOV SI, 00

1:10111110 (опер.

SI =0

Правильное

 

 

сложения)

 

исполнение

00C5

MOV AX,[SI+0068]

1:10001011 (опер.

AX=1

Правильное

 

 

вычитания)

 

исполнение

 

 

2:10000100 (рег. АХ)

 

 

 

 

3 и 4: адрес

 

 

00C9

MOV BX,[SI+0040]

1:10001011 (опер.

BX = 5

Правильное

 

 

присваивания)

 

исполнение

 

 

2:00011110 (рег. ВХ)

 

 

 

 

3 и 4: адрес

 

 

00CD

CMP AX, BX

1:00111011 (опер.

C = 1

Правильное

 

 

сранвения)

S = 1

исполнение

 

 

2:11000011

A = 1

 

00CF

JA 00D3

1:01110111 (опер.

То же

Правильное

 

 

условного перехода)

 

исполнение

 

 

2:00000010 (адрес

 

 

 

 

метки)

 

 

00D1

JB 00D7

1:01110010 (опер.

IP = 00D7

Правильное

 

 

условного перехода)

 

исполнение

 

 

2:00000100 (адрес

 

 

 

 

метки)

 

 

00D3

MOV[SI+0040], AX

1:10001001 (опер.

 

Правильное

 

 

присваивания)

 

исполнение

 

 

2:10000100 (адрес)

 

 

00D7

ADD SI, 0002

1:10000011 (опер.

SI = 2

Правильное

 

 

сложения)

 

исполнение

 

 

2:11000110 (рег. SI)

 

 

00DA

LOOP 00C5

1:11100010 (опер

IP = 00DC

Правильное

 

 

перехода)

 

исполнение

 

 

2:11101001(адрес

 

 

 

 

метки)

 

 

00DC

MOV CX, [00B8]

1:10001011 (опер.

CX = 5

Правильное

 

 

присваивания)

 

исполнение

 

 

2:00001110 (рег. СХ)

 

 

 

 

3 и 4: адрес

 

 

00E0

MOV SI, 00

1:10111110 (опер.

SI = 0

Правильное

 

 

присваивания)

 

исполнение

00E3

MOV DX, 0035

1: 10111010 (опер.

DX = 35

Правильное

 

 

присваивания и рег.

 

исполнение

 

 

DX)

 

 

00E6

MOV AH, 09

1:10110100 (опер.

AH = 9

Правильное

 

 

присваивания и рег.

 

исполнение

 

 

АН)

 

 

00E8

INT 21

1:11001101(опер.

 

Правильное

 

 

прерывания)

 

исполнение

 

 

2:00100001(число 21)

 

 

00EA

MOV AX, [SI+0040]

1: 10001011(опер.

AX = 5

Правильное

 

 

присваивания)

 

исполнение

 

 

2: 10000100(рег. АХ)

 

 

00EE

CALL 005A

1: 11101000(опер.

 

Корректный вызов

 

 

вызова

 

подпрограммы

 

 

подпрограммы)

 

 

 

 

2: 01101001(адрес)

 

 

00F1

ADD SI, 0002

1: 10000011(опер.

SI = 2

Правильное

 

 

сложения)

 

исполнение

 

 

2: 11000110(рег. SI)

 

 

00F4

MOV DX, 003E

1: 10111010(опер.

DX = 3E

Правильное

 

 

присваивания)

 

исполнение

 

 

2: 00111110(рег. DX)

 

 

00F7

MOV AH, 09

1: 10110100(опер.

AH = 9

Правильное

 

 

присваивания и рег.

 

исполнение

 

 

АН)

 

 

00F9

INT 21

1: 11001101(опер.

 

Правильное

 

 

прерывания)

 

исполнение

 

 

2: 00100001(число 21)

 

 

00FB

LOOP 00EA

1: 11100010(опер.

IP = 00FD

Правильное

 

 

перехода)

 

исполнение

 

 

2: 11101101(адрес

 

 

 

 

метки)

 

 

00FD

MOV AX, 4C00

1: 10111000(опер.

AX = 4C00

Правильное

 

 

присваивания)

 

исполнение

0100

INT 21

1: 11001101(опер.

 

Правильное

 

 

прерывания)

 

исполнение

 

 

2: 00100001(число 21)

 

 

Взаимодействие с пользователем.

После запуска программа просит ввести число — количество элементов в массиве (рис. 1).

Рис. 1 Далее программа просит последовательно ввести содержимое первого и

второго массива (рис. 2).

Рис. 2

Врезультате программа выводит на экран массив, в котором каждый элемент

наибольший из одноименных элементов двух введенных массивов (рис. 3).

Рис. 3

Вывод.

В ходе выполнения лабораторной работы была реализована программа, которая просит ввести с клавиатуры два массива чисел. В результате программа выводит на экран массив, в котором каждый элемент — больший из одноименных элементов двух введенных массивов.

Приложение 1. Исходный код.

TITLE LAB3

.Model Small

.STACK 100h

.Data

message0 db 'Enter number of elements: ','$'

message1 db 'Enter mas1: ','$' message2 db 'Enter mas2: ','$' message3 db 'Result: ','$' message4 db ' ','$'

mas1 dw 20 dup(?)

mas2

dw 20 dup(?)

ans

dw 20 dup(?)

num

dw ?

b

dw

?

buff db

?

error db 'ERROR', '$'

.Code input proc push cx push si 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 si pop cx

ret

ng: neg ax pop si pop cx ret

input endp

output proc push cx push si 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 pop si

pop cx ret

output endp

begin:

mov ax, @data mov ds, ax

lea dx, message0 mov ah, 09

int 21h

call input mov [num], ax mov cx,[num] mov si, 00

lea dx, message1 mov ah, 09

int 21h

enter1: call input

mov [mas1+si], ax add si,2

loop enter1

mov cx,[num] mov si, 00

lea dx, message2

mov ah, 09 int 21h

enter2: call input

mov [mas2+si], ax add si,2

loop enter2

mov cx,[num] mov si, 00

change:

mov ax,[mas2+si] mov bx,[mas1+si] cmp ax,bx

ja ver1 jb cont

ver1:

mov [mas1+si], ax

cont: add si,2

loop change

mov cx,[num] mov si, 00

lea dx, message3 mov ah, 09

int 21h

outt:

mov ax,[mas1+si] ;mov ah, 00

call output add si,2

lea dx, message4 mov ah, 09

int 21h loop outt

mov ax, 4c00h int 21h

end begin

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