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. Просмотреть листинг программы и записать его в отчет.