Комментарии в макрокомандах

3.1. Составить в текстовом редакторе следующую программу в ЕХЕ-формате:

.286

TITLE MACRO3 (EXE) Директивы .LALL и .SALL

;--------------------------------------------

INIT2 MACRO CSNAME,DSNAME,SSNAME

ASSUME CS:CSNAME,DS:DSNAME

ASSUME SS:SSNAME,ES:DSNAME

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSNAME

MOV DS,AX

MOV ES,AX

ENDM ;Конец макрокоманды

;--------------------------------------------------

PROMPT MACRO MESSAGE

; Макрокоманда выводит на экран любые сообщения

;; Генерирует команды вызова DOS

MOV AH,09 ;Вывод на экран

LEA DX,MESSAGE

INT 21H

ENDM

;-------------------------------------------------------

STAC SEGMENT PARA 'Stac'

DW 32 DUP(?)

STAC ENDS

;---------------------------------------------------

DATA SEGMENT PARA 'Data'

MESSG1 DB 'Customer name?','$'

MESSG2 DB 'Customer address?','$'

DATA ENDS

;---------------------------------------------------

CSEG SEGMENT PARA 'Code'

BEGIN PROC FAR

.SALL

INIT2 CSEG,DATA,STAC ;Макрокоманда

PROMPT MESSG1

.LALL

PROMPT MESSG2

RET

BEGIN ENDP

CSEG ENDS

END BEGIN

В программе определены два макроопределения INIT2 и PROMPT. Кодовый сегмент содержит директиву .SALL для подавления распечатки INIT2 и первого расширения PROMPT. Для второго расширения PROMPT директива .LALL указывает ассемблеру на вывод в листинг комментария и макрорасширения.

3.2. Выполнить ассемблирование и компоновку программы. Запустить программу из панели NORTON. Просмотреть листинг программы и записать его в отчет.

Использование макрокоманд внутри макроопределения.

4.1. Составить в текстовом редакторе следующую программу в ЕХЕ-формате:

.286

TITLE MACRO4 (EXE) Вложенные макрокоманды

;--------------------------------------------

INIT2 MACRO CSNAME,DSNAME,SSNAME

ASSUME CS:CSNAME,DS:DSNAME

ASSUME SS:SSNAME,ES:DSNAME

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSNAME

MOV DS,AX

MOV ES,AX

ENDM ;Конец макрокоманды

;--------------------------------------------------

DOS21 MACRO DOSFUNC

MOV AH,DOSFUNC

INT 21H

ENDM

;-------------------------------------------------------

DISP MACRO CHAR

MOV DL,CHAR

DOS21 02

ENDM

;--------------------------------------------------------

STAC SEGMENT PARA 'Stac'

DW 32 DUP(?)

STAC ENDS

;---------------------------------------------------

DATA SEGMENT PARA 'Data'

NAMEPAR LABEL BYTE ;Список параметров

MAXLEN DB 20 ;Максимальная длина

ACTLEN DB ? ;Реальная длина

NAMEFLD DB 20 DUP (' ') ;Введенные символы

DATA ENDS

;---------------------------------------------------

CSEG SEGMENT PARA 'Code'

BEGIN PROC FAR

.SALL

INIT2 CSEG,DATA,STAC ;Макрокоманда

LEA DX,NAMEPAR

DOS21 0AH

.LALL

DISP '*'

RET

BEGIN ENDP

CSEG ENDS

END BEGIN

Макроопределение DOS21 заносит в регистр АН номер функции DOS и выполняет INT 21H. Макроопределение DISP использует макроопределение DOS21 для установки в регистре АН функции 02 для вывода символа. Указывая параметр макроопределения DISP можно выводить любой символ.

4.2. Выполнить ассемблирование и компоновку программы. Запустить программу из панели NORTON. Просмотреть листинг программы и записать его в отчет.

Наши рекомендации