IA32体系结构5(x86程序控制指令)

2024-02-21 23:32

本文主要是介绍IA32体系结构5(x86程序控制指令),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转移指令

转移指令(JMP)允许程序员跳过一段程序,跳转到存储器的任何位置执行下一条指令。条件转移则允许程序员根据对数值的测试做出决定。这些数值测试的结果保存在标志位中,再由条件转移指令检测它们。

1.无条件转移指令

可以分为短转移、近转移、远转移。

短转移-2字节指令,允许在+127和-128字节范围内转移

近转移-3字节指令,允许在+32kb和-32kb范围内转移

远转移-5字节指令,允许转移到整个实存储器系统内的任何内存单元

短转移和近转移通常称为段内转移,远转移通常称为段间转移。

在80386以上处理器中,如果机器按保护模式运行,有4GB的代码段,则近转移是在+2GB和-2GB范围内;如果按实模式运行,则近转移是在+32kb和-32kb范围内。三种指令的机器码指令格式如下:

上图主要是以16位为例,如果是80386及以上处理器,运行在保护模式,位移量就是32位长。以上第二个近转移指令就是5字节指令,第三个就是7字节指令。

(1)短转移

短转移也称为相对转移,因为它们可以与相关的软件一起移动到当前代码段内的任何位置。这是因为转移地址不与操作码一起存储。替代转移地址的是操作码后面的距离,即位移量。短转移的位移量用一个字节的有符号数表示的距离,这个值的范围是+127到-128。微处理器执行短转移时,位移量先被符号扩展,然后加到指令指针(IP/EIP)上,从而得到当前代码段内的转移地址。举例如下:

START:    mov ax, 1add ax, bxjmp SHORT NEXT
NEXT:mov bx, axjmp START

(2)近转移

除了距离较大以外,近转移类似于短转移。80386及以上cpu,保护模式下近转移的位移量位32位长,其代码段长度达4GB,因此32位的位移量允许近转移到2GB~-2GB范围。近转移同样也是可重定位的,因此它也是相对转移。如果代码段移到存储器新的位置,转移指令与操作数之间的距离保持不变,就允许通过简单的移动代码段实现重定位。这个特性与可重定位数据段一起使得intel系列处理器完美地用于通用计算机系统。

(3)远转移

远转移从指令中得到新的段地址和偏移地址,以实现转移。

as86汇编器中,段间跳转使用jmpi汇编指令,指令中带上段和偏移,比如bootsect.s里面的"jmpi    go,INITSEG"。

2.条件转移指令

8086~80286微处理器的条件转移指令都是短转移,这就把条件转移的范围限制在相对条件转移指令位置的+127到-128字节以内。80386以上的微处理器,条件转移是短转移或是近转移,因此允许这些微处理器有条件地转移到当前代码段内的任何位置。

3.过程调用

CALL指令跳转到过程,RET指令从过程返回。执行跳转时,CALL指令将其后的指令地址压入堆栈,RET指令从堆栈弹出地址,返回到CALL指令之后的指令运行。

(1)近CALL指令

近CALL指令有3字节长,第1个字节包含操作码。对于8086~80286微处理器,第2和第3字节包含正负32KB的位移量或距离,这与近转移指令的格式想同。80386以上的微处理器按保护模式操作时用32位的位移量,允许正负2GB的距离。

(2)远CALL指令

远CALL指令的操作码后面跟随IP和CS寄存器的值,执行时先将IP和CS内容压入堆栈。

(3)RET指令

RET指令从堆栈中取出16位数字(近返回)放入IP,或者取出32位数字(远返回)放入IP和CS中。

这篇关于IA32体系结构5(x86程序控制指令)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733445

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

matlab一些基本重要的指令

重点内容 运行MATLAB的帮助demo,在Command Window 输入 “demo”,或在Launch Pad 选项卡“demos” 任何时候都可以: 清除Command Window内容:clc 清除Figure Window(图形窗口) clf 清除workspace 变量内容: clear 注意:M脚本文件和输入指令中的变量都在workspace中,为避免变量冲突,一般在