[汇编学习笔记][第十章 CALL和RET指令]
第十章 CALL和RET指令
call和ret指令都是转移指令,它们都修改CS和IP。经常被共同用于实现子程序的设计。这一章,我们讲解call和ret指令的原理
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指令时,进行两步操作:
- 将当前的
IP或CS和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指令]的更多相关文章
- 汇编学习笔记(11)int指令和端口
格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...
- 王爽汇编第十章,call和ret指令
目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...
- 汇编入门学习笔记 (十二)—— int指令、port
疯狂的暑假学习之 汇编入门学习笔记 (十二)-- int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...
- 交换机安全学习笔记 第九~十章 HSRP VRRP
HSRP (Hot Standby Router Protocol) 热备份路由器协议 思科私有 HSRP消息使用UDP 端口号 1985(IPv6时为2029) 使用多播地址 224.0.0.2( ...
- 汇编学习笔记(7)call和ret指令
ret和retf CPU执行ret指令时进行以下两步操作: (IP)=((ss)*16+(sp)) (sp)=(sp)+2 这相当于pop IP CPU执行retf指令时进行以下四步操作: (IP)= ...
- 汇编学习笔记(3)[bx]和loop
本文是<汇编语言>一书的学习笔记,对应书中的4-6章. 汇编程序的执行 要想将源代码变为可执行的程序需经过编译.连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作.将MAS ...
- 第十章 Call 和 Ret 指令
引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...
- 汇编学习笔记(AT&T语法)
一个最基本的汇编程序如下所示: .section .data .section .text .globl _start _start: movl $, %eax # the number 1 is t ...
- 汇编学习笔记——DOS及DEBUG介绍
转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...
随机推荐
- 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 ...
- asp.net从服务器(指定文件夹)下载任意格式的文件到本地
一.我需要从服务器下载ppt文件到本地 protected void Btn_DownPPT_Click(object sender, EventArgs e) { ...
- 再入门JavaScript
从去年毕业到现今,工作不到一年.接触了3个实际项目,一个实训项目.却反而只有实训项目做的比较像样子. 重新又回到写脚本的岗位上,第一次真正意义上接触脚本应该是在达内培训时候李大神所引进,大神各种技术, ...
- hdu 1282 回文数猜想
Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...
- web api简单验证实现办法
需要使用WEBAPI,但是有验证问题没解决.后来参考网上文章做了一下DEMO 思路: 就是根据用户的账号在服务端加密一个字符串,然后返回给用户端. 具体: 一个用户编号用于唯一身份识别,密码,一个密钥 ...
- 关于 addEventListener 和 handleEvent 方法
使用 addEventListener 可以绑定事件,并传入回调函数. Mozilla 0.9.1 和 Netscape 6.1 之后的版本不但支持传递函数引用,也都允许直接把拥有 handleEve ...
- ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试
ECshop使用财付通接口支付时出现“[3006]您的请求无效,请重新再试.”解决方案\includes\modules\payment\tenpay.php 行 104原来的为 $bill_no = ...
- 函数:我的地盘听我的 - 零基础入门学习Python019
函数:我的地盘听我的 让编程改变世界 Change the world by program 函数与过程 在小甲鱼另一个实践性超强的编程视频教学<零基础入门学习Delphi>中,我们谈到了 ...
- 消息提醒,初探Notification
1:MainActivity.java package com.example.notificationtest; import android.app.Activity; import androi ...
- POJ 2152 Fire(树形DP)
题意: 思路:令F[i][j]表示 的最小费用.Best[i]表示以i为根节点的子树多有节点都找到负责消防站的最小费用. 好难的题... #include<algorithm> #incl ...