当前位置: 网学 > 编程文档 > 汇编语言 > 正文

汇编语言的准备知识

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
 int sex; 
  float height; 
  float weight; 
  } marry; 

  变量marry就对应一个内存地址。在这个地址开始,有足够多的字节(sizeof(marry))容纳所有的成员。每一个成员则对应一个相对于这个地址的偏移量。这里假设此结构中所有的成员都连续存放,则age的相对地址为0,sex为2, height 为4,weight为8。 

  ; marry.sex=0; 

  lea ebx,xxxxxxxx ;marry 对应的内存地址 
  mov word ptr [ebx+2], 0 
   

  对象的情况基本相同。注意成员函数具体的实现在代码段中,在对象中存放的是一个指向该函数的指针。
5. 函数调用 

  一个函数在被定义时,也确定一个内存地址对应于函数名字。如: 

  long comb(int m, int n) 
  { 
  long temp; 
  .. 

  return temp; 
  } 

  这样,函数comb就对应一个内存地址。对它的调用表现为: 

  CALL xxxxxxxx ;comb对应的地址。这个函数需要两个整型参数,就通过堆栈来传递: 

  ;lresult=comb(2,3); 

  push 3 
  push 2 
  call xxxxxxxx 
  mov dword ptr [yyyyyyyy], eax ;yyyyyyyy是长整型变量lresult的地址 

  这里请注意两点。第一,在C语言中,参数的压栈顺序是和参数顺序相反的,即后面的参数先压栈,所以先执行push 3. 第二,在我们讨论的32位系统中,如果不指明参数类型,缺省的情况就是压入32位双字。因此,两个push指令总共压入了两个双字,即8个字节的数据。然后执行call指令。call 指令又把返回地址,即下一条指令(mov dword ptr.)的32位地址压入,然后跳转到xxxxxxxx去执行。 

  在comb子程序入口处(xxxxxxxx),堆栈的状态是这样的: 

  03000000 (请回忆small endian 格式) 
  02000000 
  yyyyyyyy <--ESP 指向返回地址 

  前面讲过,子程序的标准起始代码是这样的: 

  push ebp ;保存原先的ebp 
  mov ebp, esp;建立框架指针 
  sub esp, XXX;给临时变量预留空间 
  .. 

  执行push ebp之后,堆栈如下: 

  03000000 
  02000000 
  yyyyyyyy 
  old ebp <---- esp 指向原来的ebp 

  执行mov ebp,esp之后,ebp 和esp 都指向原来的ebp. 然后sub esp, xxx 给临时变量留空间。这里,只有一个临时变量temp,是一个长整数,需要4个字节,所以xxx=4。这样就建立了这个子程序的框架: 

  03000000 
  02000000 
  yyyyyyyy 
  old ebp <---- 当前ebp指向这里 
  temp 
  所以子程序可以用[ebp+8]取得第一参数(m),用[ebp+C]来取得第二参数(n),以此类推。临时变量则都在ebp下面,如这里的temp就对应于[ebp-4]. 

  子程序执行到最后,要返回temp的值: 

  mov eax,[ebp-04] 
  然后执行相反的操作以撤销框架: 

  mov esp,ebp ;这时esp 和ebp都指向old ebp,临时变量已经被撤销 
  pop ebp ;撤销框架指针,恢复原ebp. 

  这是esp指向返回地址。紧接的retn指令返回主程序: 

  retn 4 

  该指令从堆栈弹出返回地址装入EIP,从而返回到主程序去执行call后面的
  • 下一篇资讯: 如何学习汇编语言
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号