📄 faml.mac
字号:
;----------------------------------------------------------
; 作者:陈文尧
; 文件:Faml.mac
; 版本:1.04
; 创建日期:1999.08.11
; 修改日期:2001.09.20
;----------------------------------------------------------
;功能:返回DOS
;调用格式:ReturnDos [ReturnCode]
ReturnDos MACRO ReturnCode
;;
IFNB <ReturnCode>
IFDIFI <ReturnCode>,<al>
mov al,ReturnCode
ENDIF
mov ah,4ch
ELSE
mov ax,4c00h
ENDIF
;;
int 21h
;;
ENDM
;功能:返回DOS并驻留内存
;调用格式:TSR TSR_End[,Startup]
TSR MACRO TSR_End,Startup
;;
mov ax,3100h
;;
IFNB <Startup>
mov dx,(TSR_End-Startup+010fh)/10h
ELSE
mov dx,(TSR_End-@@Start+010fh)/10h
ENDIF
int 21h
;;
ENDM
;功能:返回DOS并驻留内存
;调用格式:Reside ResideEnd[,Startup]
;备注:本宏是为兼容老代码而保留的
Reside MACRO ResideEnd,Startup
TSR ResideEnd,Startup
ENDM
;功能:返回DOS并驻留内存
;调用格式:TSR2 [Length]
TSR2 MACRO @Length
mov ax,3100h
IFNB <@Length>
IFDEF __RELEASE__
mov dx,(100h+@Length+000fh)/10h
ELSE
IFDEF __COM__
mov dx,(100h+@Length+000fh)/10h
ELSE
mov dx,1010h
ENDIF
ENDIF
ELSE
IFDEF __COM__
mov dx,1000h
ELSE
mov dx,1010h
ENDIF
ENDIF
int 21h
ENDM
;功能:初始化数据段
;调用格式:InitDS Value
InitDS MACRO Value
;;
IFNDEF __COM__
push Value
pop ds
ENDIF
;;
ENDM
;功能:修改程序所占的多余内存
;调用格式:ModifyMemory [Length]
;注:本宏是留给《汇编专家》使用
ModifyMemory MACRO @Length
;;
IFNB <@Length>
mov bx,(@Length+010fh)/10h
IFDEF __COM__
mov sp,((@Length+010fh) and 0fff0h);-2h
ELSE
mov sp,((@Length+000fh) and 0fff0h);-2h
ENDIF
ELSE
IFDEF __COM__
mov bx,1000h
ELSE
mov bx,1010h
ENDIF
ENDIF
mov ah,4ah
int 21h
jc short @@Exit
;;
ENDM
;功能:初始化堆栈段
;调用格式:InitStack SsValue,SpValue
InitStack MACRO Value
;;
IFNDEF __COM__
mov ax,SsValue
mov ss,ax
mov ax,SpValue
mov sp,ax
ENDIF
;;
ENDM
;功能:段之间值传送
;调用格式:MovSeg dSeg,sSeg
MovSeg MACRO dSeg,sSeg
push sSeg
pop dSeg
ENDM
;功能:字节存储单元之间值传送
;调用格式:MovMemB dMem,sMem
MovMemB MACRO dMem,sMem
mov al,sMem
mov dMem,al
ENDM
;功能:字存储单元之间值传送
;调用格式:MovMemW dMem,sMem
MovMemW MACRO dMem,sMem
mov ax,sMem
mov dMem,ax
ENDM
;功能:把除sp以外的通用寄存器入栈
;调用格式:PushAll
PushAll MACRO
;;
IF @Cpu EQ __8086__
push ax
push bx
push cx
push dx
push bp
push si
push di
ELSE
pusha
ENDIF
;;
ENDM
;功能:把除sp以外的通用寄存器出栈
;调用格式:PopAll
PopAll MACRO
;;
IF @Cpu EQ __8086__
pop di
pop si
pop bp
pop dx
pop cx
pop bx
pop ax
ELSE
popa
ENDIF
;;
ENDM
;功能:显示一条信息(以$结尾的字符串)
;调用格式:DisplayMessage Message
DisplayMessage MACRO Message
mov dx,offset Message
mov ah,09h
int 21h
ENDM
;; 功能:未来汇编库函数调用方式
;; 调用格式:LibCall Fun,p1,p2,p3,p4,p5,p6,p7,p8,p9,p0
LibCall MACRO Fun,p1,p2,p3,p4,p5,p6,p7,p8,p9,p0
% IFNDEF @@&Fun
% extrn @@&Fun&:near
ENDIF
;;
IFNB <p1>
push p1
ENDIF
;;
IFNB <p2>
push p2
ENDIF
;;
IFNB <p3>
push p3
ENDIF
;;
IFNB <p4>
push p4
ENDIF
;;
IFNB <p5>
push p5
ENDIF
;;
IFNB <p6>
push p6
ENDIF
;;
IFNB <p7>
push p7
ENDIF
;;
IFNB <p8>
push p8
ENDIF
;;
IFNB <p9>
push p9
ENDIF
;;
IFNB <p0>
push p0
ENDIF
;;
call @@&Fun
;;
ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -