一、Call和Ret指令

  

二、在子过程中需要自己保存可能会修改掉的寄存器值,这里可以使用USES伪指令来生成

  

三、一个数组求和的汇编例子

  

  1. TITLE Call a Proc Demo
  2. INCLUDE Irvine32.inc
  3. includelib Irvine32.lib
  4. includelib kernel32.lib
  5. includelib user32.lib
  6.  
  7. .data
  8. array DWORD 1000h,2000h,3000h,4000h
  9.  
  10. .code
  11.  
  12. ;---------------------------------------------------
  13. ;
  14. ; Calcute the sum of an array of 32-bit int integers
  15. ; Receives: ESI = the array offset
  16. ; ECX = the size of array
  17. ; Returns: EAX = sum of an array
  18. ;---------------------------------------------------
  19.  
  20. ArraySum PROC
  21.  
  22. push esi
  23. push ecx
  24. mov eax,
  25. L1:
  26. add eax,[esi]
  27. add esi,TYPE DWORD
  28. loop L1
  29.  
  30. pop ecx
  31. pop esi
  32. ret
  33.  
  34. ArraySum endp
  35.  
  36. ;---------------------------------------------------
  37. ;
  38. ; Calcute the sum of an array of 32-bit int integers
  39. ; Receives: ESI = the array offset
  40. ; ECX = the size of array
  41. ; Returns: EAX = sum of an array
  42. ;---------------------------------------------------
  43.  
  44. ArraySumWithUses PROC USES esi ecx
  45.  
  46. mov eax,
  47. L2:
  48. add eax,[esi]
  49. add esi,TYPE DWORD
  50. loop L2
  51.  
  52. ret
  53.  
  54. ArraySumWithUses endp
  55.  
  56. main PROC
  57.  
  58. mov esi,offset array
  59. mov ecx,LENGTHOF array
  60. call ArraySum
  61. call DumpRegs
  62. mov esi,offset array
  63. mov ecx,LENGTHOF array
  64. call ArraySumWithUses
  65. call DumpRegs
  66. ret
  67.  
  68. main endp
  69.  
  70. END main

执行结果:

《Intel汇编第5版》 汇编调用子过程的更多相关文章

  1. 《Intel汇编第5版》 汇编拷贝字符串

    一.字符串定义 二.dup指令 三.调用Writestring过程 四.代码以及效果 TITLE String Copy INCLUDE Irvine32.inc includelib Irvine3 ...

  2. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  3. GCC嵌入式汇编(内嵌汇编)入门

    GCC嵌入式汇编(内嵌汇编)入门 1. 入门 在C中嵌入汇编的最大问题是如何将C语言变量与指令操作数相关联.当然,gcc都帮我们想好了.下面是是一个简单例子. asm("fsinx %1, ...

  4. 织梦dedecms调用子栏目的方法

    织梦调用子栏目名称在栏目.文章页及首页的方法是有区别的.首页的调用方法和在栏目的调用基本是一样的,如下: {dede:channel typeid=''} <li><h3>&l ...

  5. C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常,不存在从对象类型System.Windows.Forms.DateTimePicker到已知的托管提供程序本机类型的映射。

    一:C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常 其实,这个问题与C#的垃圾回收有关.垃圾回收器管 理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的 垃圾回收器 ...

  6. (转)C#在父窗口中调用子窗口的过程(无法访问已释放的对象)

    C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象   笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...

  7. MVC(@html.action)调用子操作方法

    1*简单调用 子操作方法: 服务端 客户端 2.带有参数的调用 子操作方法 服务端 客户端

  8. vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

    在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> < ...

  9. dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码

    dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码. dedecms列表页调用子栏目列表标签: {dede:channelartlist type='sun' }<a href ...

随机推荐

  1. URL 调度器(URL dispatcher)

    URL 调度器(URL dispatcher) 在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 UR ...

  2. Dotliquid使用Json模板变量

    Dotliquid是不错的Template Engine,为了更方便使用,扩展了一下,使它支持json数据的替换,引用了Newtonsoft.Json.Linq /// <summary> ...

  3. jquery选择器之层级过滤选择器

    $("ancestor descendant"):选取parent元素后所有的child元素 $("parent > child"):选取parent元素 ...

  4. XML中的五个保留字符及实体引用

    字符名称 字符 实体引用 和 & & 大于号 >  > 小于号 <  < 单引号 ‘ &apos; 双引号 “ " 在XML文档中,构成元素内 ...

  5. CSS样式基础知识

    CSS样式基础知识 CSS样式概述 CSS是Cascading Style Sheet 的缩写.译作“层叠样式表单”.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 引用位 ...

  6. 使用Func<T1, T2, TResult>

    使用Func<T1, T2, TResult> 委托返回匿名对象   Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类 ...

  7. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  8. Hexo+NextT基本设置【3】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要      或许在你看到我这篇我文章之前,你已经成功的通过Git ...

  9. CSS预处理器的对比 — Sass、Less和Stylus

    本文根据Johnathan Croom的<sass vs. less vs. stylus: Preprocessor Shootout>所译,整个译文带有我们自己的理解与思想,如果译得不 ...

  10. 通过python为zabbix发送告警邮件

    最近部署ZABBIX的邮件告警时,用刚学的python来写告警邮件脚本. 由于时间有限,我只对关键步骤做截图,对zabbix的基本配置略过. python代码如下 1 #!/usr/bin/pytho ...