ret和call的原理

CALL和RET指令 自我学习得出的CALL和RET指令 阅读详情

1.ret

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

CPU执行ret指令时,进行下面两步操作:

(1)(IP)=((ss)*16+(sp))  //使用栈顶元素修改IP实现跳转

(2)(sp)=(sp)+2


2.retf

用栈中的数据,修改CS和IP的内容,从而实现远转移

CPU执行retf指令时,进行下面四步操作:

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

(2)(sp)=(sp)+2

(3)(CS)=((ss)*16+(sp))

(4)(sp)=(sp)+2

发现retf依次弹出栈的2个元素来修改IP和CS

可以看出,如果我们用汇编语言来解释ret和retf指令,则CPU执行ret指令时,相当于进行:

pop IP

CPU执行retf指令时,相当于进行

pop IP

pop CS


3 call指令

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

(1)将当前的IP或CS和IP压入栈中

(2)转移

call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同


4,根据位移进行转移的call指令

call 标号(将当前IP压栈后,转到标号处执行指令)

CPU执行此格式的call指令时,进行如下操作:

(1)(sp)=(sp)-2 

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

(2)(IP)=(IP)+16位位移

从上面的描述总,可以看出,如果我们用汇编语法来解释此格式的call指令,则:

CPU执行指令 call 标号时,相当于进行:

push ip

jmp near ptr 标号


4 call far ptr标号实现段间转移

相当于:

push cs

push ip

jmp far ptr 标号


5.转移地址在寄存器中的call指令

格式:call 16位寄存器

相当于:

push IP

jmp 16位寄存器


6.转移地址在内存中的call指令有两种格式:

(1)call word ptr 内存单元地址,相当于:

push IP

jmp word ptr 内存单元地址


(2)call dword ptr 内存地址相当于:

push cs

push ip

jmp dword ptr 内存地址












USB2.0信号完整性测试之眼图 名称线缆颜色引脚描述红色绿色白色GND黑色。 阅读详情

相关推荐

Sinutrain下载安装与开启OPC UA---kalrry

Sinutrain 开启 OPC UA 本教程只适用于版本,其他版本配置目录有所改变建议安装到默认路径,否则后期修改路径时候容易忽略细节本教程提供安装包为官方包,网上有些非官方包安装后容易出现授权问题,比如授权管理器无法启动,官方技术会建议你重装系统,很多时候是因为安装包非官方包在首次安装前,建议重启一遍系统。

kalrry 1万+

RET指令

一.ret指令用栈中的数据,修改IP的内容,从而实现近转移;  CPU执行ret指令时,进行下面两步操作: a)         (1)(IP)=((ss)*16+(sp)) b)        (2)(sp)=(sp)+2 二.retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;    CPU执行retf指令时,进行下面两步操作: a)         (1)(IP)=(

chenliujiang1989的专栏 8011

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1073

微机原理--控制转移指令

转移指令 1.JMP(unconditional jump)无条件转移 程序转移到目的操作数指定的地址执行,不需要满足任何条件. 操作数可以是标号、立即数,也可以是寄存器操作数或存储器操作数 Short jump 段内直接短转移 Near jump 段内直接近转移 Far jump 段间转移 Indirect jump 间接转移(段内、段间)...

weixin_42638401的博客 9151

Java 网络编程(超级详细)

1. 网络编程 1.1 网络编程概述 计算机网络 是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 1.2 网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。 2、端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程

imByte的博客 3万+

【车载以太网测试从入门到精通】系列文章目录汇总

物理层测试、数据链路层测试、以太网交换机测试、网络层测试、传输层测试、以太网TCP/IP协议自动化测试、以太网网络管理测试、以太网网络管理自动化测试、鲁棒性测试、SOME/IP测试、SOMEI/IP服务接口自动化测试、DoIP诊断测试、DoIP诊断自动化测试、DoIP BootLoader刷写、以太网网关路由测试、以太网网关路由自动化测试、AVB测试。

测试领域技术分享 3157

8086CPU中指令RET与IRET区别

ret 是普通的子程序的返回指令。 也可以叫做近返回,即段内返回。处理器从堆栈中弹出IP或者EIP,然后根据当前的CS:IP跳转到新的执行地址。如果之前压栈的还有其余的参数,则这些参数也会被弹出。 iret 是中断服务子程序的返回指令。 用于从中断返回,会弹出IP/EIP,然后CS,以及一些标志。然后从CS:IP执行。 ...

Artorias的博客 1万+

在树莓派4B上基于NCNN框架部署YOLOv8的实战教程

摘要:本文详细介绍了在树莓派4B上基于NCNN框架部署YOLOv8目标检测模型的完整流程。从PyTorch模型转换为NCNN格式,到树莓派环境配置(OpenCV和NCNN编译),再到C++代码实现与优化,涵盖模型加载、推理和绘图等核心功能。测试结果显示,树莓派4B上可实现约2 FPS的检测速度,Windows平台达6~7 FPS。文章还提供了量化模型、多线程优化等实用建议,并附常见问题解答,为边缘设备部署轻量化目标检测提供了可行方案。(149字)

m0_64661770的博客 595

微机原理:汇编指令集——调用传送指令、算术运算指令、转移类指令(详解)

微机原理:汇编指令集——调用传送指令、算术运算指令、转移类指令(详解)

qq_64131064的博客 2701

基于FPGA的多级CIC滤波器实现四倍插值

基于FPGA的多级CIC滤波器实现四倍插值 原文链接:基于FPGA的多级CIC滤波器实现四倍插值 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。此篇我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍插值。 1 CIC滤波器的基本概述 CIC(积分梳状...

baidu_34971492的博客 3140

YOLO12涨点改进| 损失函数改进篇 |AAAI 2025| 一种小目标检测SDLoss损失函数,解决现有损失函数对不同目标尺度敏感度不足的局限,提高了网络检测不同尺度目标的敏感能力,助力高效涨点

本文提出了一种改进的小目标检测方法SDLoss,通过动态调整尺度损失与位置损失的权重,优化了YOLOv12模型的性能。针对红外小目标检测中存在的两个主要问题:1)标准卷积难以捕捉目标的高斯空间分布特性;2)现有损失函数对不同尺度目标的敏感度不足,研究团队开发了Pinwheel-shaped卷积(PConv)和Scale-based Dynamic损失函数(SDLoss)。PConv通过不对称卷积核设计显著提升感受野,SDLoss则根据目标大小动态平衡尺度与位置损失的影响。

Ai缝合怪、助力小伙伴高效发论文 237

我也认真上过课——《微机原理》学习笔记

汇编语言程序设计这篇文章是一年之前学微机原理时写的,现在改一下格式重发到优快云博客上。主要内容是汇编语言。1 汇编语言程序及其开发源程序经过汇编成为目标程序,再将目标程序连接成为exe程序,最后进行执行和调试。2 汇编语言源程序的结构(1)执行性语句和说明性语句。汇编语句分为执行性语句和说明性语句。执行语句最后会转变为机器码,即01数据存储在内存中; 说明性语句由编译器处理,不会生成机器码。执行

dreamiond的博客 1万+

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1698

【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式

本文主要探讨汇编中的ret和retf指令以及call指令及其多种转移方式,在其中穿插示例加深理解。

2301_80191662的博客 2990

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

读王爽老师汇编语言笔记---转移指令的原理和call,ret指令

2013-7-9 20:57:50 转移指令的原理 可以修改IP,或同时修改CS和IP的指令统称为转移指令, 概括讲:转移指令就是可以控制cpu执行内存中某处代码的指令。 8086cpu转移行为: 1 只修改IP时,称为段内转移,比如 jmp ax 2 同事修改CS和IP时,称为段间转移, 比如 jmp 1000:0 由于转移指令对IP的修改范围不同,段内转移又分为短转移和近转移

努力奋斗 1341

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

call指令和ret指令【笔记+详解】

call指令是一个流程转移指令,就是让程序执行的顺序发生短暂的改变,去执行别处地址上的指令,遇到ret指令后再回到原来的地方继续往下顺序执行,本质和jmp大同小异,区别是在jmp基础上增加了程序回到原来跳转处的功能......

一只喜欢code的fox 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[汇编学习笔记][第十章 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)=((s

学习之路 3569

汇编call指令详解_读《汇编语言》第三版 第十章 CALL和RET指令

call和ret都是转移指令,它们都修改IP,或同时修改CS和IP。(CS代码段寄存器与IP指令指针寄存器)。它们经常用来实现子程序的设计,本章就来看看call和ret的原理。 ret指令用栈中的数据,修改IP的内容,从而实现近转移; retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。 CPU执行call指令时,进行了两步操作,...

weixin_39696197的博客 2069

jmp、call、ret、retf解析

JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。 1、jmp指令紧紧进行执行流程的跳转,不会保存返回地址 2、call指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一

tasty 1035

7 call和ret指令

汇编语言 call和ret指令

m0_56773049的博客 736

汇编 RET 和 CALL

https://blog.youkuaiyun.com/u013018721/article/details/51264199 1.我们先来实践一下 ret 指令 DATA SEGMENT A DB 12H B DB 23H DATA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC...

愿你饱经冷暖,仍保纯真 653

call和ret指令用法

call和ret都是转移指令,它们都可以修改IP或者同时修改CS:IP,它们被共同用来实现子程序的设计 ret和retf区别 ret是用栈中的数据修改IP的值,实现近转移(段内转移) retf是用栈中的数据修改cs:IP的值,实现远转移(段间转移) 1cpu执行ret时,执行以下操作 (IP)=((ss)*16+(sp)) (sp)=(sp)+2 相当于pop ip 2c

qq_35426012的博客 2209

[汇编语言]CALL和RET指令

汇编语言 call指令和ret指令

Protein_zmm的博客 5490

汇编——第十章 CALL和RET指令

第十章 CALL和RET指令 call 和 ret 指令都是转移指令, 他们都修改IP, 或者同时修改CS 和 IP。 它们经常被共同用来实现子程序的设计。 10.1 ret 和 retf ret指令用栈中的数据,修改IP的内容,从而实现近转移; retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移; CPU执行ret指令时,进行下面俩步操作: (1)(IP) = ((ss)*16 +(...

wxy2635618879的博客 572

《汇编语言》第10章 call和ret指令

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

chenyijun的专栏 1万+

汇编中的call和ret指令

call和ret指令都是转移指令,它们都修改偏移地址或同时修改段地址和偏移地址。ret指令用栈中的数据,修改偏移地址,从而实现近转移。call可以通过位移和目的地址进行转移。下面来通过汇编代码学习一下call和ret指令的配合使用。 下面来看一下程序刚加载时栈的情况,对应16个00 程序对应的...

1万+
上一篇: 汇编转移指令的原理
下一篇: CPU的标志寄存器
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值