Ассемблер и программирование для IBM PC



       

ГЛАВА 23. Прерывания BIOS и DOS - часть 47


Macros: N a m e Length INIT1. . . . . . . . . . . . . . . . 0004

Segments and Groups: N a m e Size Align Combine Class CSEG . . . . . . . . . . . . . . . . 001A PARA NONE 'CODE' DSEG . . . . . . . . . . . . . . . . 001A PARA NONE 'DATA' STACK. . . . . . . . . . . . . . . . 0040 PARA STACK 'STACK'

Ассемблер для IBM PC. Программы. 142

Symbols: N a m e Type Value Attr BEGIN. . . . . . . . . . . . . . . . F PROC 0000 CSEG Length=001A MESSAGE. . . . . . . . . . . . . . . L BYTE 0000 DSEG

Ассемблер для IBM PC. Программы. 143

TITLE MACRO2 (EXE) Использование параметров ; ------------------------------------------------ INIT2 MACRO CSNAME,DSNAME,SSNAME ASSUME CS:CSNAME,DS:DSNAME,SS:SSNAME,ES:DSNAME PUSH DS SUB AX,AX PUSH AX MOV AX,DSNAME MOV DS,AX MOV ES,AX ENDM ;Конец макрокоманды ; ------------------------------------------------ 0000 STACK SEGMENT PARA STACK 'Stack' 0000 20 [ ???? ] DW 32 DUP(?) 0040 STACK ENDS ; ------------------------------------------------ 0000 DSEG SEGMENT PARA 'Data' 0000 54 65 73 74 20 6F MESSAGE DB 'Test of macro', '$' 66 20 6D 61 63 72 6F 24 000E DSEG ENDS ; ------------------------------------------------ 0000 CSEG SEGMENT PARA 'Code' 0000 BEGIN PROC FAR INIT2 CSEG,DSEG,STACK 0000 1E + PUSH DS 0001 2B C0 + SUB AX,AX 0003 50 + PUSH AX 0004 B8 ---- R + MOV AX,DSEG 0007 8E D8 + MOV DS,AX 0009 8E C0 + MOV ES,AX 000B B4 09 MOV AH,09 ;Вывод на экран 000D 8D 16 0000 R LEA DX,MESSGE ;Сообщение 0011 CD 21 INT 21H 0013 CB RET 0014 BEGIN ENDP 0014 CSEG ENDS END BEGIN

Ассемблер для IBM PC. Программы. 144

TITLE MACRO3 (EXE) Директивы .LALL и .SALL ; ------------------------------------------------ INIT2 MACRO CSNAME,DSNAME,SSNAME ASSUME CS:CSNAME,DS:DSNAME,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 ; ------------------------------------------------ 0000 STACK SEGMENT PARA STACK 'Stack' 0000 20 [ ???? ] DW 32 DUP (?) 0040 STACK ENDS ; ------------------------------------------------ 0000 DATA SEGMENT PARA 'Data' 0000 43 75 73 74 6F 6D MESSG1 DB 'Customer name?', '$' 65 72 20 6E 61 6D 65 3F 24 000F 43 75 73 74 6F 6D MESSG2 DB 'Customer address?', '$' 65 72 20 61 64 64 72 65 73 73 3F 24 0021 DATA ENDS ; ------------------------------------------------ 0000 CSEG SEGMENT PARA 'Code' 0000 BEGIN PROC FAR .SALL INIT2 CSEG,DATA,STACK PROMPT MESSG1 .LALL PROMPT MESSG2 + ; Макрокоманда выводит на экран любые сообщения 0013 B4 09 + MOV AH,09 ;Вывод на экран 0015 8D 16 000F R + LEA DX,MESSG2 0019 CD 21 + INT 21H 001B CB RET 001C BEGIN ENDP 001C CSEG ENDS END BEGIN




Содержание  Назад  Вперед