前言
- 各位师傅大家好,我是qmx_07,今天讲解 masm函数语法相关知识点
函数语法
-
介绍: masm 是一堆伪指令,用于简化代码
-
距离
例子:
-
ret 返回 2 个字节:适用于 NEAR 函数,返回同一代码段的偏移地址
-
retf 返回 4 个字节:适用于 FAR 函数,返回段地址和偏移地址
-
调用约定 和 参数
例子:
stdcall:
使用stdcall调用约定,会自动平栈
c:
使用c调用约定,需要使用者手动平栈
注意:参数只能传递word类型
-
局部变量
-
invoke伪指令
格式:
invoke 函数名,参数1,参数2,参数3
说明:
- 会生成参数入栈代码
- 如果是c调用约定,会生成平栈代码
- 如果是局部变量取地址,需要使用addr伪指令
- 使用addr的时候,注意ax的使用
注意:invoke伪指令 调用立即数 是将数字 mov到ax,再push
注意:区分 取局部变量的使用情景
文件操作
打开文件
tool.asm
;功能 - 创建文件,如果文件存在,则清空
;参数 - szFileName - 文件名,0结尾字符串
;返回 -
; 失败 - 返回 -1
; 成功 - 返回文件句柄
OpenFile proc far stdcall uses dx szFileName:word
mov ah,3dh
mov al,02h;可读,可写
mov dx,szFileName
int 21h
jnc SUCESS
;失败
mov ax,-1
ret
SUCESS:
;成功
ret
OpenFile ENDP
读取文件
ReadFile proc far stdcall uses bx dx cx hFile:word,pBuff:word,nBufSize:word
mov bx,hFile
mov ah,3fh
mov dx,pBuff
mov cx,nBufSize
int 21h
jnc SUCESS
;失败
mov ax,0
ret
SUCESS:
ret
ReadFile ENDP
关闭文件
CloseFile proc far stdcall hFile:word
mov bx,hFile
mov ah,3eh
int 21h
ret
CloseFile ENDP
例子:
总结
引入 MASM 函数优化语法,如 invoke、调用约定、局部变量和自动栈管理,MASM 的代码风格和开发效率得到显著提升,文件管理