X86架构(六)——移位指令与无条件转移指令

2024-09-03 23:28

本文主要是介绍X86架构(六)——移位指令与无条件转移指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

移位指令

  • shr
    逻辑右移
    逻辑右移指令会将操作数连续地向右移动指定的次数,移出的比特被移到标志寄存器的CF位,左边空出来的位置用0填充
    逻辑右移示意图
;目的操作数可以是8位或16位的通用寄存器或者内存单元
;源操作数可以是数字18位立即数或者寄存器CL
shr r/m8, 1		;目的操作数是8位通用寄存器/内存单元,源操作数是1
shr ah, 1
shr r/m16, 1	;目的操作数是16位通用寄存器/内存单元,源操作数是1
shr ax, 1
shr r/m8, imm8	;目的操作数是8位通用寄存器/内存单元,源操作数是8位立即数
shr al, 0x20
shr r/m16, imm8	;目的操作数是16位通用寄存器/内存单元,源操作数是8位立即数
shr ax, 0x02
shr r/m8, cl	;目的操作数是8位通用寄存器/内存单元,源操作数是寄存器CL
shr al, cl
shr r/m16, cl	;目的操作数是16位通用寄存器/内存单元,源操作数是寄存器CL
shr word [bx], cl
  • shl
    逻辑左移指令
    该指令与shr指令的格式一致,只不过是向左移动
shl dx, 12
  • ror
    循环右移指令
    循环右移指令将目的操作数移出的比特送到标志寄存器的CF位,同时将其送进左边空出的位
    循环右移
    NOTE 该指令与shr格式相同,在此不再赘述
  • rol
    循环左移
    循环左移指令将目的操作数移出的比特送到标志寄存器的CF位,同时将其送进右边空出的位
    NOTE 该指令与shr格式相同,在此不再赘述

8086无条件转移指令

  1. 相对短转移
    该类转移的操作数是相对于目标位置的偏移量,仅1字节,是个有符号数(-128~127)
    该指令属于段内转移指令,只允许转移到距离当前指令-128~127 字节的地方
jmp short __xxx	;__xxx为标号
;编译阶段,编译器会检查标号`__xxx`所代表的值,如果数值超过了一字节所能允许的数值范围
;则无法通过编译
;相对短转移指令的汇编语言操作数只能是标号和数值
jmp short 0x2000
;数值和标号是等价的。在编译阶段,都被用来计算一个8位的偏移量
;在指令执行时,处理器把指令中的操作数加上2,再加到指令指针寄存器IP
  1. 16位相对近转移
    16位相对近转移指令后跟16位(2 字节)的操作数
    相对的意思是指它的操作数是一个相对量,是相对于目标位置处的偏移量
    在源程序编译阶段,编译器用目标位置的汇编地址减去当前指令的汇编地址,再减去当前指令的长度(3),保留16 位的结果,作为机器指令的操作数。这是一个16 位的有符号数,故可以转移到距离当前指令-32768~32767 字节的地方
jmp near __xxx
jmp near 0x3000
  1. 16位间接绝对近转移
    这种转移方式也是近转移,转移到的目标偏移地址不是在指令中直接给出的,而是用一个16位的通用寄存器或者内存地址来间接给出
jmp near bx
jmp near cx
;near 可省略
;处理器将用寄存器BX或者CX的内容来取代指令指针寄存器IP的当前内容
jmp [jmp_dest]	;jmp_dest是转移目标的起始偏移地址[ds:jmp_dest]
  1. 16位直接绝对远转移
jmp 0x0000:0x7c00 ;0x0000是段地址,0x7c00是偏移地址
;执行这条指令后,处理器用指令中给出的段地址代替段寄存器CS的原有内容
;用给出的偏移地址代替IP寄存器的内容
  1. 16位间接绝对远转移(jmp far)
    远转移的目标地址通过访问内存来间接得到,要使用关键字far
;标号jump_far其后初始化的字分别对应程序片段的`偏移地址和段地址`
jump_far dw 0x33c0, 0xf000
;从指令中给出的偏移地址处取出两个字,分别用来替代段寄存器CS和指令指针寄存器IP的内容
jmp far [jump_far]

这篇关于X86架构(六)——移位指令与无条件转移指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

这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

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

工作常用指令与快捷键

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

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

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

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激

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

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