第十章 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. How to resolve the SQL error “cannot connect to WMI provider”

    当你试图打开SQL Server Configuation Manager时发现如下错误: “cannot connect to WMI provider. You do not have permi ...

  2. asp.net从服务器(指定文件夹)下载任意格式的文件到本地

    一.我需要从服务器下载ppt文件到本地 protected void Btn_DownPPT_Click(object sender, EventArgs e)        {            ...

  3. 再入门JavaScript

    从去年毕业到现今,工作不到一年.接触了3个实际项目,一个实训项目.却反而只有实训项目做的比较像样子. 重新又回到写脚本的岗位上,第一次真正意义上接触脚本应该是在达内培训时候李大神所引进,大神各种技术, ...

  4. hdu 1282 回文数猜想

    Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...

  5. web api简单验证实现办法

    需要使用WEBAPI,但是有验证问题没解决.后来参考网上文章做了一下DEMO 思路: 就是根据用户的账号在服务端加密一个字符串,然后返回给用户端. 具体: 一个用户编号用于唯一身份识别,密码,一个密钥 ...

  6. 关于 addEventListener 和 handleEvent 方法

    使用 addEventListener 可以绑定事件,并传入回调函数. Mozilla 0.9.1 和 Netscape 6.1 之后的版本不但支持传递函数引用,也都允许直接把拥有 handleEve ...

  7. ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试

    ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试.”解决方案\includes\modules\payment\tenpay.php 行 104原来的为 $bill_no = ...

  8. 函数:我的地盘听我的 - 零基础入门学习Python019

    函数:我的地盘听我的 让编程改变世界 Change the world by program 函数与过程 在小甲鱼另一个实践性超强的编程视频教学<零基础入门学习Delphi>中,我们谈到了 ...

  9. 消息提醒,初探Notification

    1:MainActivity.java package com.example.notificationtest; import android.app.Activity; import androi ...

  10. POJ 2152 Fire(树形DP)

    题意: 思路:令F[i][j]表示 的最小费用.Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用. 好难的题... #include<algorithm> #incl ...