第十章 CALL和RET指令

callret指令都是转移指令,它们都修改CS和IP。经常被共同用于实现子程序的设计。这一章,我们讲解callret指令的原理

10.1 ret和retf

  • ret指令用中的数据,修改IP的内容,从而实现近转移

    • (IP)=((ss)*16+(sp))
    • (sp)=(sp)+2
    • 等于 pop IP
  • retf指令用中的数据,修改CS和IP的内容,从而实现远转移

    • (IP)=((ss)*16+(sp))
    • (sp)=(sp)+2
    • (IP)=((ss)*16+(sp))
    • (sp)=(sp)+2
    • 等于 pop IP,pop CS

10.2 call指令

CPU执行call指令时,进行两步操作:

  • 将当前的IPCS和IP压入栈中
  • 转移

call指令不能实现短转移,除此之外,call与jmp类似。

接下来以转移地址的不同方式为主线,详解call指令

10.3 根据位移进行转移的call指令(段内转移)

  • 格式: call 标号(压入栈,转移到标号)
  • 执行如下操作

    • (sp)=(sp)-2

      ((ss)*16+(sp))=(IP)

    • (IP)=(IP)+16位位移
  • 相当于

    push IP
    jmp near ptr 标号

10.4 根据目的的进行的call指令(段间转移)

  • 格式:call far ptr 标号实现段间转移

  • 执行如下操作:

    • (sp)=(sp)-2
    • ((ss)*16+(sp))=(CS)
    • (sp)=(sp)-2
    • ((ss)*16+(sp))=(IP)
    • (CS)=标号所在段的段地址
    • (IP)=标号所在段的偏移地址
  • 相当于

    push CS
    push IP
    jmp far ptr 标号
  • 注意先丢CS,再丢IP

10.5 转移地址在寄存器的call指令

  • 格式:call 16位reg
  • 功能

    • (sp)=(sp)-2
    • ((ss)*16+(sp))=(IP)
    • (IP)=(16位reg)
  • 相当于

    push IP
    jmp 16位reg

10.6 转移地址在内存的call指令

  • call word ptr 内存单元地址

    • 相当于

      push IP
      jmp word ptr 内存单元地址
  • call dword ptr 内存单元地址

    • 相当于

      push CS
      push IP
      jmp dword ptr 内存单元地址

10.7 call和ret的配合使用

  • call 相当于 函数调用
  • ret 相当于 return

10.8 mul指令(乘法)

mul 是乘法指令
必须都是8位,或是16位

  • 8位:一个放在AL,另一个放在8位reg或内存单元,结果放在AX
  • 16位: 一个放在AX,另一个放在16位reg或内存单元,结果高位放在DX,低位放在AX

10.10 参数和结果传递的问题

  • 用寄存器来存储参数和结果是最常使用的方法

10.11 批量数据的传递

  • 将批量数据的首地址存入寄存器
  • 返回数据的收地存入寄存器

10.12 寄存器冲突的问题

子程序开始:子程序中使用的寄存器入栈

           子程序的内容

           子程序中使用的寄存器出栈

           返回(ret,retf)

[汇编学习笔记][第十章 CALL和RET指令]的更多相关文章

  1. 汇编学习笔记(11)int指令和端口

    格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...

  2. 王爽汇编第十章,call和ret指令

    目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...

  3. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  4. 交换机安全学习笔记 第九~十章 HSRP VRRP

    HSRP  (Hot Standby Router Protocol) 热备份路由器协议 思科私有 HSRP消息使用UDP 端口号 1985(IPv6时为2029) 使用多播地址 224.0.0.2( ...

  5. 汇编学习笔记(7)call和ret指令

    ret和retf CPU执行ret指令时进行以下两步操作: (IP)=((ss)*16+(sp)) (sp)=(sp)+2 这相当于pop IP CPU执行retf指令时进行以下四步操作: (IP)= ...

  6. 汇编学习笔记(3)[bx]和loop

    本文是<汇编语言>一书的学习笔记,对应书中的4-6章. 汇编程序的执行 要想将源代码变为可执行的程序需经过编译.连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作.将MAS ...

  7. 第十章 Call 和 Ret 指令

    引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...

  8. 汇编学习笔记(AT&T语法)

    一个最基本的汇编程序如下所示: .section .data .section .text .globl _start _start: movl $, %eax # the number 1 is t ...

  9. 汇编学习笔记——DOS及DEBUG介绍

    转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...

随机推荐

  1. 使用.NET框架、Web service实现Android的文件上传(一)

    上面是上传结果的展示,下面具体讲一下实现过程. 一.Web Service (.NET) namespace VedioPlayerWebService.service.vedios { [WebSe ...

  2. SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框

    1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...

  3. iOS_SN_详解沙河(转载)

    一 查看沙盒结构 和一些百度来的博客显示隐藏稳文件的方式不同,本文也提供两种方式,简单粗暴. 方式一 使用工具simpholders(推荐) 下载链接 http://simpholders.com/  ...

  4. oc随笔三:多态

    多态使用总结: (1)没有继承就没有多态 (2)代码的体现:父类类型的指针指向子类对象 (3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行 ...

  5. HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,short col1,int row1,short col2, int row2)

      public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int  ...

  6. Qt中gb2312/GBK的URL编解码函数

    编码函数: QByteArray encodeURI(QString str) { QByteArray array; QTextCodec *codec=QTextCodec::codecForNa ...

  7. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  8. Window7下手动编译最新版的PCL库

    PCL简介 PCL是Point Cloud Library的缩写,是一个用于处理二维图像,三维深度图像和三维点云的C++库.该库是完全开源的,可免费用于商业和学术研究. 官方网站:http://poi ...

  9. 在Eclipse中运行hadoop程序

    1.下载hadoop-eclipse-plugin-1.2.1.jar,并将之复制到eclipse/plugins下. 2.打开map-reduce视图 在eclipse中,打开window--> ...

  10. JSON对象与JSON数组的长度和遍历方法

    JSON对象与JSON数组的长度和遍历方法         1.json对象的长度与遍历                 结构:var json={“name”:”sm”,”sex”:”woman”} ...