СП - ЛР 9 (1075972)
Текст из файла
Согласовано: Гапанюк Ю.Е. "__"_____________2010 г. | Утверждаю: Большаков С.А. "__"_____________2010 г. |
Лабораторная работа №9 по курсу
Системное программирование
"Разработка и использование макрокоманд Ассемблера"
8
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-41 | ________________ |
Сидякин А.А. | "12" апреля 2010 г. |
Москва - 2010
__________________________________________________________
Цель лабораторной работы:
Разработать собственные макрокоманды Ассемблера и проверить их работу
Исходный текст программы:
; Лабораторная работа №9
;===============================================================================
prgr segment
assume CS:prgr,DS:data ; соответствие сегментных регистров
begin: mov AX,data
mov DS,AX
mov AX,02h
int 10h
PRINT MACRO symb, newl
IFB <symb>
.ERR
%OUT No parameter #1
ENDIF
IFB <newl>
.ERR
%OUT No parameter #2
ENDIF
PER EQU <'Y'>
mov AH,02h
mov DL,symb
int 21h
IFIDN <newl>,PER
mov AH,02h
mov DL,10
int 21h
mov DL,13
int 21h
ENDIF
ENDM
PRINT 'A','Y'
push AX
CALL CLRF
pop AX
MAS MACRO sz, nm, bs, stp
tmp = bs
&nm db bs
rept sz-1
tmp = tmp * stp
db tmp
endm
endm
MAS 6, array, 4, 2
AGREGATE MACRO nam, siz, vrb
local next
XOR CX,CX
mov CL,siz
mov SI,0
XOR BX,BX
next: XOR DX,DX
mov DL,nam[SI]
add BX,DX
inc SI
loop next
mov vrb,BX
endm
AGREGATE array, 6, variable
mov AX,variable
CALL hex2dec
CALL CLRF
CALL CLRF
PRINT_MAS MACRO nme, sze, cnt
local nxt,txn
mov CX,cnt
mov SI,0
nxt: XOR AX,AX
mov AL,nme[SI]
push CX
CALL hex2dec
pop CX
mov AH,02h
mov DL,32
int 21h
inc SI
inc SI
loop nxt
mov SI,1
CALL CLRF
mov DX,sze
sub DX,cnt
mov CX,DX
txn: XOR AX,AX
mov AL,nme[SI]
push CX
CALL hex2dec
pop CX
mov AH,02h
mov DL,32
int 21h
inc SI
inc SI
loop txn
endm
PRINT_MAS array, 6, 3
mov AX,4C00h
int 21h
; ------------------------------------------------------------------------------
CLRF proc ; процедура переноса строки и возврата каретки
mov AH,02h
mov DL,10
int 21h
mov DL,13 ; символ возврата каретки
int 21h
RET
CLRF endp
; ------------------------------------------------------------------------------
hex2dec proc
; делим шестнадцатеричного на 10 до упора
mov CX,0 ; количество цифр в десятичном числе
xor BX,BX ;
xor DX,DX ;
mov BX,10 ; основание системы счисления
dvsn: div BX ; делим AX на BX, результат в AX, остаток в DX
push DX ; скинули остаток в стек
xor DX,DX ; обнулили DX, иначе повлияет на деление
inc CX ; увеличили счётчик количества цифр в числе
test AX,AX ; если пока ещё делится нацело,
jnz dvsn ; то делим ещё раз
; вывод десятичного числа поциферно
mov AH,02h
ot: pop DX ; подняли первую цифру десятичного числа
add DX,'0' ; получили её ASCII-код
int 21h ; вывели на экран
loop ot ; повторять CX раз (по количеству цифр)
RET
hex2dec endp
; ------------------------------------------------------------------------------
prgr ends ; конец сегмента команд
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
data segment ; начало сегмента данных
variable dw 0
hx db 2 dup (32)
data ends ; конец сегмента данных
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
stk segment stack ; начало сегмента стека
db 256 dup (0) ; резервирование 256 байт для стека
stk ends ; конец сегмента стека
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
end begin ; конец текста программы, установка точки входа
;===============================================================================
Листинг программы:
Turbo Assembler Version 2.51 12/04/10 00:37:56 Page 1
lr9.ASM
1 ; Лабораторная работа №9
2 ;===============================================================================
3 0000 prgr segment
4
5 assume CS:prgr,DS:data
6
7 0000 B8 0000s begin: mov AX,data
8 0003 8E D8 mov DS,AX
9
10 0005 B8 0002 mov AX,02h
11 0008 CD 10 int 10h
12
13 PRINT MACRO symb, newl
14 IFB <symb>
15 .ERR
16 %OUT No parameter #1
17 ENDIF
18 IFB <newl>
19 .ERR
20 %OUT No parameter #2
21 ENDIF
22 PER EQU <'Y'>
23 mov AH,02h
24 mov DL,symb
25 int 21h
26 IFIDN <newl>,PER
27 mov AH,02h
28 mov DL,10
29 int 21h
30 mov DL,13
31 int 21h
32 ENDIF
33 ENDM
34
35 PRINT 'A','Y'
1 36 000A B4 02 mov AH,02h
1 37 000C B2 41 mov DL,'A'
1 38 000E CD 21 int 21h
1 39 0010 B4 02 mov AH,02h
1 40 0012 B2 0A mov DL,10
1 41 0014 CD 21 int 21h
1 42 0016 B2 0D mov DL,13
1 43 0018 CD 21 int 21h
44
45 001A 50 push AX
46 001B E8 0071 CALL CLRF
47 001E 58 pop AX
48
49 MAS MACRO sz, nm, bs, stp
50 tmp = bs
51 &nm db bs
52 rept sz-1
53 tmp = tmp * stp
54 db tmp
55 endm
56 endm
57
58 MAS 6, array, 4, 2
1 59 001F 04 array db 4
2 60 0020 08 db tmp
2 61 0021 10 db tmp
2 62 0022 20 db tmp
2 63 0023 40 db tmp
2 64 0024 80 db tmp
65
66 AGREGATE MACRO nam, siz, vrb
67 local next
68 XOR CX,CX
69 mov CL,siz
70 mov SI,0
71 XOR BX,BX
72 next: XOR DX,DX
73 mov DL,nam[SI]
74 add BX,DX
75 inc SI
76 loop next
77 mov vrb,BX
78 endm
79
80 AGREGATE array, 6, variable
1 81 0025 33 C9 XOR CX,CX
1 82 0027 B1 06 mov CL,6
1 83 0029 BE 0000 mov SI,0
1 84 002C 33 DB XOR BX,BX
1 85 002E 33 D2 ??0000: XOR DX,DX
1 86 0030 2E: 8A 94 001Fr mov DL,array[SI]
1 87 0035 03 DA add BX,DX
1 88 0037 46 inc SI
1 89 0038 E2 F4 loop ??0000
1 90 003A 89 1E 0000r mov variable,BX
91 003E A1 0000r mov AX,variable
92 0041 E8 0056 CALL hex2dec
93 0044 E8 0048 CALL CLRF
94
95 0047 E8 0045 CALL CLRF
96 PRINT_MAS MACRO nme, sze, cnt
97 local nxt,txn
98 mov CX,cnt
99 mov SI,0
100 nxt: XOR AX,AX
101 mov AL,nme[SI]
102 push CX
103 CALL hex2dec
104 pop CX
105 mov AH,02h
106 mov DL,32
107 int 21h
108 inc SI
109 inc SI
110 loop nxt
111 mov SI,1
112 CALL CLRF
113 mov DX,sze
114 sub DX,cnt
115 mov CX,DX
116 txn: XOR AX,AX
117 mov AL,nme[SI]
118 push CX
119 CALL hex2dec
120 pop CX
121 mov AH,02h
122 mov DL,32
123 int 21h
124 inc SI
125 inc SI
126 loop txn
127 endm
128
129 PRINT_MAS array, 6, 3
1 130 004A B9 0003 mov CX,3
1 131 004D BE 0000 mov SI,0
1 132 0050 33 C0 ??0001: XOR AX,AX
1 133 0052 2E: 8A 84 001Fr mov AL,array[SI]
1 134 0057 51 push CX
1 135 0058 E8 003F CALL hex2dec
1 136 005B 59 pop CX
1 137 005C B4 02 mov AH,02h
1 138 005E B2 20 mov DL,32
1 139 0060 CD 21 int 21h
1 140 0062 46 inc SI
1 141 0063 46 inc SI
1 142 0064 E2 EA loop ??0001
1 143 0066 BE 0001 mov SI,1
1 144 0069 E8 0023 CALL CLRF
1 145 006C BA 0006 mov DX,6
1 146 006F 83 EA 03 sub DX,3
1 147 0072 8B CA mov CX,DX
1 148 0074 33 C0 ??0002: XOR AX,AX
1 149 0076 2E: 8A 84 001Fr mov AL,array[SI]
1 150 007B 51 push CX
1 151 007C E8 001B CALL hex2dec
1 152 007F 59 pop CX
1 153 0080 B4 02 mov AH,02h
1 154 0082 B2 20 mov DL,32
1 155 0084 CD 21 int 21h
1 156 0086 46 inc SI
1 157 0087 46 inc SI
1 158 0088 E2 EA loop ??0002
159
160 008A B8 4C00 mov AX,4C00h
161 008D CD 21 int 21h
162
163 008F CLRF proc
164 008F B4 02 mov AH,02h
165 0091 B2 0A mov DL,10
166 0093 CD 21 int 21h
167 0095 B2 0D mov DL,13
168 0097 CD 21 int 21h
169 0099 C3 RET
170 009A CLRF endp
171
172 009A hex2dec proc
173
174 009A B9 0000 mov CX,0
175 009D 33 DB xor BX,BX
176 009F 33 D2 xor DX,DX
177 00A1 BB 000A mov BX,10
178 00A4 F7 F3 dvsn: div BX
179 00A6 52 push DX
180 00A7 33 D2 xor DX,DX
181 00A9 41 inc CX
182 00AA 85 C0 test AX,AX
183 00AC 75 F6 jnz dvsn
184
185 00AE B4 02 mov AH,02h
186 00B0 5A ot: pop DX
187 00B1 83 C2 30 add DX,'0'
188 00B4 CD 21 int 21h
189 00B6 E2 F8 loop ot
190 00B8 C3 RET
191 00B9 hex2dec endp
192
193 00B9 prgr ends
194
195 0000 data segment
196 0000 0000 variable dw 0
197 0002 02*(20) hx db 2 dup (32)
198 0004 data ends
199
200 0000 stk segment stack
201 0000 0100*(00) db 256 dup (0)
202 0100 stk ends
203
204 end begin
Symbol Name Type Value
??0000 Near PRGR:002E
??0001 Near PRGR:0050
??0002 Near PRGR:0074
??DATE Text "12/04/10"
??FILENAME Text "lr9 "
??TIME Text "00:37:56"
??VERSION Number 0205
@CPU Text 0101H
@CURSEG Text STK
@FILENAME Text LR9
@WORDSIZE Text 2
ARRAY Byte PRGR:001F
BEGIN Near PRGR:0000
CLRF Near PRGR:008F
DVSN Near PRGR:00A4
HEX2DEC Near PRGR:009A
HX Byte DATA:0002
OT Near PRGR:00B0
PER Text 'Y'
TMP Number 0080
VARIABLE Word DATA:0000
Macro Name
AGREGATE
MAS
PRINT_MAS
Groups & Segments Bit Size Align Combine Class
DATA 16 0004 Para none
PRGR 16 00B9 Para none
STK 16 0100 Para Stack
Результат работы программы:
A
252
4 16 64
8 32 128
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.