当前位置: 首页 > news >正文

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指令一次保存和恢复所有寄存器来得方便。

http://www.lryc.cn/news/199170.html

相关文章:

  • 【论文阅读】 Cola-Dif; An explainable task-specific synthesis network
  • ShareMouse for Mac(多台电脑鼠标键盘共享软件)
  • 中文编程开发语言工具开发案例:多种称重方式编程实际例子
  • 国密sm2的Vue、Python、Java互通使用
  • 如何通过SK集成chatGPT实现DotNet项目工程化?
  • DRM中render-node编号的分配
  • 将输入对象转换为数组数组的维度大于等于1numpy.atleast_1d()
  • js 删除树状图无用数据,如果子级没有数据则删除
  • Docker 容器化(初学者的分享)
  • LCS 01.下载插件
  • 架构-设计原则
  • 在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路
  • Spring学习笔记(2)
  • cmd使用ssh连接Linux脚本
  • Python万圣节蝙蝠
  • TCP流套接字编程
  • Python迭代器创建与使用:从入门到精通
  • mac虚拟机安装homebrew时的问题
  • 学信息系统项目管理师第4版系列32_信息技术发展
  • Vue3 + Nodejs 实战 ,文件上传项目--大文件分片上传+断点续传
  • 宏(预编译)详解
  • hue实现对hiveserver2 的负载均衡
  • SkyWalking 告警规则配置说明
  • HTML 表单笔记/练习
  • 关于Java Integer和Long使用equals直接比较
  • nodejs+vue衣服穿搭推荐系统-计算机毕业设计
  • Java并发面试题:(七)ThreadLocal原理和内存泄漏
  • 香港服务器在国内访问太慢怎么能提高?
  • 使用Proxyman抓取Android的https请求
  • 基础MySQL的语法练习