Всякие лабы / LabRab_3
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра вычислительной техники
ОТЧЕТ по лабораторной работе №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