过程

堆栈操作

  • LIFO

运行时堆栈

  • 入栈操作

    • 高地址向低地址
  • 出栈操作

    • 低地址高低地址
  • 堆栈作用

    • 临时保存寄存器, 被修改后可恢复
    • 执行call时,保存返回地址
    • 参数压入堆栈进行传递
    • 临时存储局部变量

    push, pop

    • push

      • 减少esp的值,将源操作数复制到堆栈
      • push reg/mem16
      • push reg/mem32
      • push imm32
    • pop
      • 增加esp的值,将堆栈中的内容复制到16位或32位操作数中
      • pop reg/mem16
      • pop reg/mem32

    pushfd, popfd

    • pushfd: 将32位eflags寄存器压入到堆栈中
    • popfd: 将堆栈中的内容复制到eflags中
    .data
    saveFlags dword ?
    .code
    pushfd
    pop saveFlagspush saveFlags
    popfd
    

    pushad, pusha, popad, popa

    • pushad将eax, ecx, edx, ebx, esp(执行之前的值), ebp, esi, edi的顺序压栈
    • popad以相反顺序弹栈
    • pusha将ax, cx, dx, bx, sp(执行之前的值), bp, si, di的顺序压栈
    • popa以相反顺序弹栈
    • 过程用一个或多个寄存器来返回结果时,不应该使用

定义并使用过程

proc

main proc
...
main endpsample proc
...ret
sample endp; 标号与jmp在同一个过程中
jmp destination
; 取消限制
destination ::; 三个整数求和
sumof procadd eax, ebxadd eax, ecxret
sumof endp
  • 添加描述信息
  • 输入参数及其用法的列表,并将其命名为Receives
  • 返回值的描述,并命名为Returns
  • 对过程返回的所有数值的描述(先决条件),在调用之前满足,并命名为Requies
;----------------------
; sumof
;
; 计算3个32位整数之和并返回和数
; Receives: eax,ebx和ecx为3个整数,可能是有符号数,或无符号数
; Returns:eax = 和数
;----------------------
sumof procadd eax, ebxadd eax, ecxret
sumof endp

call,ret

     main proc
00000020 call MySub
00000025 mov eax, ebxMySub proc
00000040 mov eax, edx
...retMySub endp
  • 过程调用嵌套

  • 向过程传递寄存器参数

    .data
    theSum dword ?
    .code
    main procmov eax, 10000hmov ebx, 20000hmov ecx, 30000hcall sumofmov theSum, eax
    

汇编 过程 创建并测试 proc endp call ret uses相关推荐

  1. ARM汇编:汇编中proc、endp、ret、near、far指令用法

    ARM汇编:汇编中proc.endp.ret.near.far指令用法 子程序名 PROC NEAR ( 或 FAR ) -- ret 子程序名 ENDP (1)NEAR属性(段内近调用): 调用程序 ...

  2. v8学习笔记(六) 汇编过程

    v8汇编过程 根据抽象语法树FunctionLiteral创建Code对象(内含机器指令),返回JSFunction对象. MakeCode(): 1.增加返回语句:  Rewriter::Proce ...

  3. PCL——1.介绍及工程创建与测试

    目录 pcl介绍 工程创建与测试 CMakeLists.txt内容解释 pcl介绍 对于3D点云处理来说,PCL完全是一个模块化的现代C++模板库.其基于以下第三方库:Boost.Eigen.FLAN ...

  4. 从零开始详解应用内支付——商品创建及测试上架

    当用户在应用市场里下载APP,体验了免费的基础功能和服务后,通过自主选择付费,以获取和使用应用内提供的增值服务--这种用户应用内购买行为的完成,就需要用到应用内支付(In-App Purchases, ...

  5. Jmeter基本使用到精通(一)从安装第一个任务线程的创建及测试

    (一)jemter介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...

  6. 项目描述_单元测试技巧:创建描述性测试

    项目描述 您的单元测试应尽可能具有描述性. 他们给您的反馈应该非常清楚,您甚至不必启动调试器并一步一步地检查代码以检查局部变量. 为什么? 因为那需要时间,而且我们很懒,对吗? 为此,您需要创建描述性 ...

  7. 单元测试 问题描述_单元测试技巧:创建描述性测试

    单元测试 问题描述 您的单元测试应尽可能具有描述性. 他们给您的反馈应该非常清楚,您甚至不必启动调试器,并一步一步地检查代码以检查局部变量. 为什么? 因为那需要时间,而且我们很懒,对吗? 为此,您需 ...

  8. 单元测试技巧:创建描述性测试

    您的单元测试应尽可能具有描述性. 他们给您的反馈应该非常清楚,您甚至不需要启动调试器并一步一步地检查代码来检查局部变量. 为什么? 因为那需要时间,而且我们很懒,对吗? 为此,您需要创建描述性测试. ...

  9. Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试

    原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html 功能性测试包括模 ...

最新文章

  1. 疯狂上涨的 Python,开发者应从 2.x 还是 3.x 着手?
  2. 如何查看linux系统服务器磁盘大小和文件占用情况
  3. vb 字符串替换_学习VB编程第69天 字符串查找与替换
  4. OpenGL deferred shading延迟渲染的实例
  5. 理解正向代理和反向代理
  6. 计算机组成原理实验 组装实验报告,计算机组成原理实验一实验报告..doc
  7. 60页论文综述深度学习优化方法,出自UIUC
  8. 动态规划java LCS_动态规划递归求解LCS长度 | 学步园
  9. 《TensorFlow 2.0深度学习算法实战教材》学习笔记(五、神经网络)
  10. Xen虚拟化平台安装及实时迁移
  11. HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...
  12. 图数据库_多款业界流行图数据库对比
  13. html特殊符号拉丁文,拉丁文字符号大全,罗马字母
  14. 学习笔记(1):C#Winform水晶报表实例教程-设计带图片的水晶报表
  15. 解读《美国国家BIM标准》 – BIM能力成熟度模型 (七)
  16. 江苏计算机对口高考分数线,单招好还是高考好|江苏省对口单招 历年分数线是多少?...
  17. datav(datav)
  18. 烂笔头投资日记20221212
  19. python3*1**3 表达式输出结果为_3*1**3 表达式输出结果为________
  20. 宿舍管理系统的设计与实现/学生宿舍管理系统

热门文章

  1. 运用vue.js写的表格小demo
  2. Android studio 签名使用转
  3. js获取本月第几周和本年第几周
  4. LightOJ 1205 Palindromic Numbers
  5. 关于release后retainCount还是1的问题
  6. 使用JS在textarea在光标处插入内容
  7. Oracle 10g OCP 042 题库 1-30 题 共168题
  8. 7.Linux 输入子系统分析
  9. 【NOIP2013模拟】黑魔法师之门
  10. k8s nodeport下访问请求未被分发到所有node的排错(转)