⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 faml.mac

📁 汇编实时运行 核心的汇编源 代码
💻 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 + -