第十章 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. timed out waiting for input: auto-logout

    The ssh "timed out waiting for input: auto-logout" messages is generated by ssh upon reach ...

  2. CSS3绘制环形进度条

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. (转).net控件dropdownlist动态绑定数据

    DropDownList控件的使用(数据绑定)(.net学习笔记二)(2006-10-12 07:28:49) 转载   分类:.net学习笔记 一.在页面初始化时候将集合绑定到DropDownLis ...

  4. SQL Server链接MySQL实践

    最近在访问多数据库的时候进行了SQLServer链接MySQL数据的实践,现总结如下: 一.  安装mysql-connector-odbc驱动: 1. 在SQL Server服务器的机器上安装mys ...

  5. C#上传图片同时生成缩略图,控制图片上传大小。

    #region 上传图片生成缩略图 /// <summary> /// 上传图片 /// </summary> /// <param name="sender& ...

  6. IOS 代码管理工具

    代码管理工具国内主要用的是SVN 国外主要是Git

  7. android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法

    android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法   SharedPreferences保存数据到xml文件 有时候要保存activity的某些状 ...

  8. CSS的一些思考(一)

    迈入前端行业已经8个多月了,从之前懵懵懂懂到现在的能根据设计图迅速成型页面,自我感觉良好.最近看到张大牛的一篇博客<说说CSS学习中的瓶颈>,突然意识到,自己不就处在快速学习和成长后的一个 ...

  9. python文件_目录

    #! /usr/bin/env python #coding=gbk import os import time #设置文件的默认路径,当指定的目录不存在时,引发异常:WindowsError:[er ...

  10. Django-Rest-Framework 教程: 快速入门

    本篇中, 我们会创建一个简单的API, 用来查看和编辑django默认的user和group数据. 1. 设置 我们创建django项目tutorial, 和app quickstart: # 创建新 ...