Выводы.
В результате работы были разобраны некоторые базовые концепции языка асемблера. Были изучены различные способы адресации в языке ассемблера. Была исправлена транслирована и собрана тестовае программа, разобраны ошибки, встречающиеся в ней, произведена пошаговая отладка с занесением результатов в таблицу.
Приложения
LR2_comp.ASM исходный
; Учебная программа лабораторной работы №2 по дисциплине "Архитектура компьютера"
;
;
EOL EQU '$'
ind EQU 2
n1 EQU 500
n2 EQU -50
; Стек программы
AStack SEGMENT STACK
DW 12 DUP(?)
AStack ENDS
; Данные программы
DATA SEGMENT
; Директивы описания данных
mem1 DW 0
mem2 DW 0
mem3 DW 0
vec1 DB 38,37,36,35,31,32,33,34
vec2 DB 70,80,-70,-80,50,60,-50,-60
matr DB -2,-1,5,6,-8,-7,3,4,-4,-3,7,8,-6,-5,1,2
DATA ENDS
; Код программы
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:AStack
; Головная процедура
Main PROC FAR
push DS
sub AX,AX
push AX
mov AX,DATA
mov DS,AX
; ПРОВЕРКА РЕЖИМОВ АДРЕСАЦИИ НА УРОВНЕ СМЕЩЕНИЙ
; Регистровая адресация
mov ax,n1
mov cx,ax
mov bl,EOL
mov bh,n2
; Прямая адресация
mov mem2,n2
mov bx,OFFSET vec1
mov mem1,ax
; Косвенная адресация
mov al,[bx]
mov mem3,[bx]
; Базированная адресация
mov al,[bx]+3
mov cx,3[bx]
; Индексированная адресация
mov di,ind
mov al,vec2[di]
mov cx,vec2[di]
; Адресация с базированием и индексированием
mov bx,3
mov al,matr[bx][di]
mov cx,matr[bx][di]
mov ax,matr[bx*4][di]
; ПРОВЕРКА АДРЕСАЦИИ С УЧЕТОМ СЕГМЕНТОВ
; Переопределение сегмента
; ------ вариант 1
mov ax, SEG vec2
mov es, ax
mov ax, es:[bx]
mov ax, 0
; ------ вариант 2
mov es, ax
push ds
pop es
mov cx, es:[bx-1]
xchg cx,ax
; ------ вариант 3
mov di,ind
mov es:[bx+di],ax
; ------ вариант 4
mov bp,sp
mov ax,matr[bp+bx]
mov ax,matr[bp+di+si]
; Использование сегмента стека
push mem1
push mem2
mov bp,sp
mov dx,[bp]+2
ret
Main ENDP
CODE ENDS
END Main
LR2_comp.LST исходный
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:27:41
Page 1-1
1 ; Учебная программа лабораторной работ
ы №2 по дисциплине "Архитектура компьют
ера"
2 ;
3 ;
4 = 0024 EOL EQU '$'
5 = 0002 ind EQU 2
6 = 01F4 n1 EQU 500
7 =-0032 n2 EQU -50
8
9 ; Стек программы
10
11 0000 AStack SEGMENT STACK
12 0000 000C[ DW 12 DUP(?)
13 ????
14 ]
15
16 0018 AStack ENDS
17
18 ; Данные программы
19
20 0000 DATA SEGMENT
21
22 ; Директивы описания данных
23
24 0000 0000 mem1 DW 0
25 0002 0000 mem2 DW 0
26 0004 0000 mem3 DW 0
27 0006 26 25 24 23 1F 20 vec1 DB 38,37,36,35,31,32,33,34
28 21 22
29 000E 46 50 BA B0 32 3C vec2 DB 70,80,-70,-80,50,60,-50
,-60
30 CE C4
31 0016 FE FF 05 06 F8 F9 matr DB -2,-1,5,6,-8,-7,3,4,-4,
-3,7,8,-6,-5,1,2
32 03 04 FC FD 07 08
33 FA FB 01 02
34
35 0026 DATA ENDS
36
37 ; Код программы
38
39 0000 CODE SEGMENT
40 ASSUME CS:CODE, DS:DATA, SS:A
Stack
41
42 ; Головная процедура
43 0000 Main PROC FAR
44 0000 1E push DS
45 0001 2B C0 sub AX,AX
46 0003 50 push AX
47 0004 B8 ---- R mov AX,DATA
48 0007 8E D8 mov DS,AX
49
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:27:41
Page 1-2
50 ; ПРОВЕРКА РЕЖИМОВ АДРЕСАЦИИ НА УРОВНЕ
СМЕЩЕНИЙ
52 0009 B8 01F4 mov ax,n1
53 000C 8B C8 mov cx,ax
54 000E B3 24 mov bl,EOL
55 0010 B7 CE mov bh,n2
57 0012 C7 06 0002 R FFCE mov mem2,n2
58 0018 BB 0006 R mov bx,OFFSET vec1
59 001B A3 0000 R mov mem1,ax
61 001E 8A 07 mov al,[bx]
62 mov mem3,[bx]
LR2_CO~1.ASM(55): error A2052: Improper operand type
63 ; Базированная адресация
64 0020 8A 47 03 mov al,[bx]+3
65 0023 8B 4F 03 mov cx,3[bx]
66 ; Индексированная адресация
67 0026 BF 0002 mov di,ind
68 0029 8A 85 000E R mov al,vec2[di]
69 002D 8B 8D 000E R mov cx,vec2[di]
LR2_CO~1.ASM(62): warning A4031: Operand types must match
70 ; Адресация с базированием и индексиро
ванием
71 0031 BB 0003 mov bx,3
72 0034 8A 81 0016 R mov al,matr[bx][di]
73 0038 8B 89 0016 R mov cx,matr[bx][di]
LR2_CO~1.ASM(66): warning A4031: Operand types must match
74 003C 8B 85 0022 R mov ax,matr[bx*4][di]
LR2_CO~1.ASM(67): error A2055: Illegal register value
75
76 ; ПРОВЕРКА АДРЕСАЦИИ С УЧЕТОМ СЕГМЕНТО
В
77 ; Переопределение сегмента
78 ; ------ вариант 1
79 0040 B8 ---- R mov ax, SEG vec2
80 0043 8E C0 mov es, ax
81 0045 26: 8B 07 mov ax, es:[bx]
82 0048 B8 0000 mov ax, 0
83 ; ------ вариант 2
84 004B 8E C0 mov es, ax
85 004D 1E push ds
86 004E 07 pop es
87 004F 26: 8B 4F FF mov cx, es:[bx-1]
88 0053 91 xchg cx,ax
89 ; ------ вариант 3
90 0054 BF 0002 mov di,ind
91 0057 26: 89 01 mov es:[bx+di],ax
92 ; ------ вариант 4
93 005A 8B EC mov bp,sp
94 005C 3E: 8B 86 0016 R mov ax,matr[bp+bx]
LR2_CO~1.ASM(87): error A2046: Multiple base registers
95 0061 3E: 8B 83 0016 R mov ax,matr[bp+di+si]
LR2_CO~1.ASM(88): error A2047: Multiple index registers
96 ; Использование сегмента стека
97 0066 FF 36 0000 R push mem1
98 006A FF 36 0002 R push mem2
99 006E 8B EC mov bp,sp
100 0070 8B 56 02 mov dx,[bp]+2
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:27:41
Page 1-3
101 0073 CB ret
102 0074 Main ENDP
LR2_CO~1.ASM(95): error A2006: Phase error between passes
103 0074 CODE ENDS
104 END Main
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:27:41
Symbols-1
Segments and Groups:
N a m e Length Align Combine Class
ASTACK . . . . . . . . . . . . . 0018 PARA STACK
CODE . . . . . . . . . . . . . . 0074 PARA NONE
DATA . . . . . . . . . . . . . . 0026 PARA NONE
Symbols:
N a m e Type Value Attr
EOL . . . . . . . . . . . . . . NUMBER 0024
IND . . . . . . . . . . . . . . NUMBER 0002
MAIN . . . . . . . . . . . . . . F PROC 0000 CODE Length = 0074
MATR . . . . . . . . . . . . . . L BYTE 0016 DATA
MEM1 . . . . . . . . . . . . . . L WORD 0000 DATA
MEM2 . . . . . . . . . . . . . . L WORD 0002 DATA
MEM3 . . . . . . . . . . . . . . L WORD 0004 DATA
N1 . . . . . . . . . . . . . . . NUMBER 01F4
N2 . . . . . . . . . . . . . . . NUMBER -0032
VEC1 . . . . . . . . . . . . . . L BYTE 0006 DATA
VEC2 . . . . . . . . . . . . . . L BYTE 000E DATA
@CPU . . . . . . . . . . . . . . TEXT 0101h
@FILENAME . . . . . . . . . . . TEXT LR2_CO_1
@VERSION . . . . . . . . . . . . TEXT 510
97 Source Lines
97 Total Lines
19 Symbols
47284 + 457929 Bytes symbol space free
2 Warning Errors
5 Severe Errors
LR2_comp.LST Финальный
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:20:28
Page 1-1
1 ; Учебная программа лабораторной работ
ы №2 по дисциплине "Архитектура компьют
ера"
2 ;
3 ;
4 = 0024 EOL EQU '$'
5 = 0002 ind EQU 2
6 = 01F4 n1 EQU 500
7 =-0032 n2 EQU -50
8
9 ; Стек программы
10
11 0000 AStack SEGMENT STACK
12 0000 000C[ DW 12 DUP(?)
13 ????
14 ]
15
16 0018 AStack ENDS
17
18 ; Данные программы
19
20 0000 DATA SEGMENT
21
22 ; Директивы описания данных
23
24 0000 0000 mem1 DW 0
25 0002 0000 mem2 DW 0
26 0004 0000 mem3 DW 0
27 0006 26 25 24 23 1F 20 vec1 DB 38,37,36,35,31,32,33,34
28 21 22
29 000E 46 50 BA B0 32 3C vec2 DB 70,80,-70,-80,50,60,-50
,-60
30 CE C4
31 0016 FE FF 05 06 F8 F9 matr DB -2,-1,5,6,-8,-7,3,4,-4,
-3,7,8,-6,-5,1,2
32 03 04 FC FD 07 08
33 FA FB 01 02
34
35 0026 DATA ENDS
36
37 ; Код программы
38
39 0000 CODE SEGMENT
40 ASSUME CS:CODE, DS:DATA, SS:A
Stack
41
42 ; Головная процедура
43 0000 Main PROC FAR
44 0000 1E push DS
45 0001 2B C0 sub AX,AX
46 0003 50 push AX
47 0004 B8 ---- R mov AX,DATA
48 0007 8E D8 mov DS,AX
49
#Microsoft (R) Macro Assembler Version 5.10 9/19/19 03:20:28
Page 1-2
50 ; ПРОВЕРКА РЕЖИМОВ АДРЕСАЦИИ НА УРОВНЕ
СМЕЩЕНИЙ