win32汇编-使用子程序

当程序中相同功能的一段代码用得比较频繁时,可以将它分离出来写成一个子程序,在主程序中用call指令来调用它。这样可以不用重复写相同的代码, 仅仅用call指令就可以完成多次同样的工作了。Win 32汇编中的子程序也采用堆栈来传递参数, 这样就可以用invoke 伪指令来进行调用和语法检查工作。

子程序的定义

子程序的定义方式:

子程序名 proc 距离 语言类型 可视区域 USES寄存器列表 , 参数:类型 ...VARARG
local 局部变量列表

指令

子程序名 endp

proc和endp伪指令定义了子程序开始和结束的位置

proc后面跟的参数是子程序的属性和输入参数。子程序的属性有:

●距离------可以是NEAR, FAR, NEAR16, NEAR32, FAR16或FAR32, Win32中只

有一个平坦的段,无所谓距离,所以对距离的定义往往忽略。

●语言类型-一表示参数的使用方式和堆栈平衡的方式,可以是StdCall, C, SysCall,BASIC、FORTRAN和PASCAL, 如果忽略, 则使用程序头部.model定义的值。

●可视区域------可以是PRIVATE, PUBLIC和EXPORT。PRIVATE表示子程序只对本模块可见; PUBLIC表示对所有的模块可见(在最后编译链接完成的.exe文件中) ; EXPORT 表示是导出的函数, 当编写DLL的时候要将某个函数导出的时候可以这样使用。默认的设置是PUBLIC。

●USES寄存器列表------表示由编译器在子程序指令开始前自动安排push这些寄存器的指令, 并且在ret前自动安排pop指令, 用于保存执行环境, 但笔者认为不如自己在开头和结尾用pushad和popad指令一次保存和恢复所有寄存器来得方便。

相关推荐
斑马1398 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
wechatbot8888 天前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
星栖与芯9 天前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos
星栖与芯9 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t10 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力5510 天前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳11 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t11 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳12 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor12 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机