LAB_9_2009 (1075971), страница 2
Текст из файла (страница 2)
mycode segment 'code'
assume cs:mycode, ds:mycode
assume ss: stseg
; Макрокоманда печати символа с переводом строки
; 1-й параметр= символ, второй парметр признак перевода "PER"
PRINT MACRO ch, CR
mov dl, ch
mov ah, 2
int 21h
IFIDN <CR>,<PER>
mov dl, 0Ah
mov ah, 2
int 21h
mov dl, 0Dh
mov ah, 2
int 21h
ELSE
IFNB <CR>
.ERR
%OUT ERRROR Ошибка параметра перевода строки
ENDIF
ENDIF
ENDM
;
main proc
;Занесение регистра DS
PUSH CS
POP DS
;;;;;;;;;;;;;;;;;;
PRINT '5', PER
; Ошибка - print 'A', AAA
print 'A'
PRINT ' ', PER
; выход с ожиданием
; Запрос символа с клавиатуры
mov ah, 08h
int 21h
mov al, 0
; Выход в ДОС
mov ah, 4ch
int 21h
main endp
;-------------------
mycode ends
;-------
stseg segment stack 'stack'
dw 256 dup(0)
stseg ends
;-------
end main
Листинг программы, полученный при ее компиляции приведен ниже. Жирным шрифтом я выделил макрорасширения, а размером шрифта и жирным шрифтом макровызовы:
Microsoft (R) QuickAssembler for QuickC Version 2.51 03/02/9
;
0000 mycode segment 'code'
assume cs:mycode, ds:mycode
assume ss: stseg
; Макрокоманда печати символа с переводом строки
; 1-й параметр= символ, второй парметр признак перевода "PER"
PRINT MACRO ch, CR
mov dl, ch
mov ah, 2
int 21h
IFIDN <CR>,<PER>
mov dl, 0Ah
mov ah, 2
int 21h
mov dl, 0Dh
mov ah, 2
int 21h
ELSE
IFNB <CR>
.ERR
%OUT ERRROR Ошибка параметра перевода строки
ENDIF
ENDIF
ENDM
;
0000 main proc
;Занесение регистра DS
0000 0E PUSH CS
0001 1F POP DS
;;;;;;;;;;;;;;;;;;
PRINT '5', PER
0002 B2 35 1 mov dl, '5'
0004 B4 02 1 mov ah, 2
0006 CD 21 1 int 21h
0008 B2 0A 1 mov dl, 0Ah
000A B4 02 1 mov ah, 2
000C CD 21 1 int 21h
000E B2 0D 1 mov dl, 0Dh
0010 B4 02 1 mov ah, 2
0012 CD 21 1 int 21h
; Ошибка - print 'A', AAA
print 'A'
0014 B2 41 1 mov dl, 'A'
0016 B4 02 1 mov ah, 2
0018 CD 21 1 int 21h
PRINT ' ', PER
001A B2 20 1 mov dl, ' '
001C B4 02 1 mov ah, 2
001E CD 21 1 int 21h
0020 B2 0A 1 mov dl, 0Ah
0022 B4 02 1 mov ah, 2
0024 CD 21 1 int 21h
0026 B2 0D 1 mov dl, 0Dh
0028 B4 02 1 mov ah, 2
002A CD 21 1 int 21h
; выход с ожиданием
; Запрос символа с клавиатуры
002C B4 08 mov ah, 08h
002E CD 21 int 21h
0030 B0 00 mov al, 0
; Выход в ДОС
0032 B4 4C mov ah, 4ch
0034 CD 21 int 21h
0036 main endp
;-------------------
0036 mycode ends
;-------
0000 stseg segment stack 'stack'
0000 0100[ dw 256 dup(0)
0000
]
0200 stseg ends
;-------
end main
Microsoft (R) QuickAssembler for QuickC Version 2.51 03/02/9
Macros:
N a m e Lines
PRINT . . . . . . . . . . . . . 16
Segments and Groups:
N a m e Length Align Combine Class
MYCODE . . . . . . . . . . . . . 0036 PARA NONE 'CODE'
STSEG . . . . . . . . . . . . . 0200 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
MAIN . . . . . . . . . . . . . . N PROC 0000 MYCODE Length = 0036
@CPU . . . . . . . . . . . . . . TEXT 0101h
@FILENAME . . . . . . . . . . . TEXT mac1s
@VERSION . . . . . . . . . . . . TEXT 520
Line Numbers:
i:\2008_2~1\kaf\sp_2009\asm_met\mac1s.asm
(1) 1:3 2:4 3:5 4:6 5:7 6:8 7:9 8:10 9:11 10:12 11:13 12:14 13:15 14:16 15:17
16:18 17:19 18:20 19:21 20:22 21:23 22:24 23:25 24:26 25:27 26:28 27:29 28:30
29:31 30:32 31:33 32:43 33:44 34:48 35:58 36:59 37:60 38:61 39:62 40:63 41:64
42:65 43:66 44:67 45:68 46:69 47:70 48:71 49:75 50:76 51:77 (0)
51 Source Lines
99 Total Lines
15 Symbols
41124 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Если макрокоманда вызвана с ошибочным параметром, в тексте примера этот вызов закомментирован, то макроассемблер сформирует сообщение об ошибке на этапе работы макропроцессора. Здесь внесена ошибка параметра “ААА” вместо “PER”:
…
; Ошибка -
print 'A', AAA
…
Пример сообщения об ошибке:
…
; Ошибка -
print 'A', AAA
0014 B2 41 1 mov dl, 'A'
0016 B4 02 1 mov ah, 2
0018 CD 21 1 int 21h
1 .ERR
i:\2008_2~1\kaf\sp_2009\asm_met\mac1s.asm(33): error A2089: forced error
…
Программа откомпилирована и отлажена в среде QC25.
Согласовано: Гапанюк Ю.Е. "__"_____________2009 г. | Утверждаю: Большаков С.А. "__"_____________2009 г. |
Лабораторная работа №9 по курсу
Системное программирование
"*******************************"
(есть/нет дополнительные требования/ требований)
11
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-4? | ________________ |
Петров И.С. | "__"_____________2009 г. |
Москва - 2009
__________________________________________________________