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

news2024/9/22 15:32:16

移位指令

  • 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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果: 前 后

使用vscode debug cpp/python混合编程的程序(从python调用的C++编译的dll)

使用vscode debug cpp/python混合编程的程序(从python调用的C编译的dll) 1. 安装插件 Python C Debugger https://marketplace.visualstudio.com/items?itemNamebenjamin-simmonds.pythoncpp-debug 2. 在.vscode/launch.json中增加配置 拷贝自 https:…

K8S日志收集

本章主要讲解在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志,包括程序直接输出到控制台日志、自定义文件日志等。 一、有哪些日志需要收集 为了更加方便的处理异常,日志的收集与分析极为重要,在学习日志收集之前,需要知…

矮草坪渲染尝试

本来说写unity里的,由于three测试方便,先试试three 这个图片是目标效果 可以看见草很矮,很密集,如果用instance来绘制的话,遭不住的 忽然发现这个效果很像绒毛效果 于是找了博客康康 https://zhuanlan.zhihu.com/p/256…

第二证券:涨停潮!传手机将使用钛金属外壳?

今天早盘,银行股再度重挫,导致上证指数、上证50纷乱创出阶段性新低,上证指数跌破2800点,小盘成长股则大面积反弹,创业板指、科创50等股指飘红。 盘面上,新式烟草、钛金属、锂矿、玻璃基板等板块涨幅居前&a…

glsl着色器学习(七)

先了解一个矩阵库twgl/m4 是一个4x4 矩阵数学转换函数的库 normalize(a, dst) 将一个向量除以它的欧几里得长度,归一化后返回参数"a"是一个vec3(三维向量)参数"dst"是用来接收结果的,如果不传,则…

【嵌入式体系结构复习资料】

选择: 1. 以下哪个不是嵌入式系统设计的主要目标?( D ) A.低成本 B.低功耗 C.实时要求高 D.超高性能 2. 嵌入式系统有别于其他系统的最大特点是(A )。 A.嵌入专用 B.高可靠 C.…

集成电路学习:什么是LCD液晶显示器

一、LCD:液晶显示器 LCD,全称Liquid Crystal Display,即液晶显示器,是一种平面超薄的显示设备。它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。LCD的主要原理是以电流刺激液晶分子产生点、线、面配合背…

mysql 使用 general 开启SQL跟踪功能

查看当前状态 mysql> SHOW VARIABLES LIKE %general%; 启用 临时启用 SET GLOBAL general_logon; SET GLOBAL general_log_file/tmp/general.log; 永久启用 通过修改配置文件来启用,需要重启mysql服务 [mysqld] general_logON general_log_file/tmp/general.log 再次查看状态…

【保姆级教程】如何在Win11上搭建一个GPU环境

CUDA和CUDNN安装 CUDA安装 下载对应cuda环境 下载链接:https://developer.nvidia.com/cuda-downloads,图片下载的是 cuda_12.6.1_560.94_windows.exe 然后一路安装即可: 安装路径如下: CUDNN安装 打开cuDNN下载页面 解压后…

排查SQL Server中的内存不足及其他疑难问题

文章目录 引言I DMV 资源信号灯资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)查询性能计数器什么是内存授予?II DBCC MEMORYSTATUS 查询内存对象III DBCC 命令释放多个 SQL Server 内存缓存 - 临时度量值IV 等待资源池 %ls (%ld)中的内存…

【408DS算法题】034进阶-22年真题_判断顺序存储二叉树是否是BST

Index 真题题目分析实现总结 真题题目 已知非空二叉树T的结点值均为正整数,采用顺序存储方式保存,数据结构定义如下: typedef struct { // MAX_STZE为已定义常量int SqBiTNode[MAX_SIZE]; // 保存二叉树结点值的数组int ElemNum; …

BM3D--Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering

系列文章目录 文章目录 系列文章目录前言稀疏三维变换域协同滤波图像去噪摘要1 引言2 分组和协作过滤A.分组B.按匹配分组C.协同过滤D.基于变换域收缩的协同过滤 3 算法结论 前言 论文地址 如果下载不了可以从 https://download.csdn.net/download/m0_70420861/89708940 获取 …

Pytorch安装 CUDA Driver、CUDA Runtime、CUDA Toolkit、nvcc、cuDNN解释与辨析

Pytorch的CPU版本与GPU版本 Pytorch的CPU版本 仅在 CPU 上运行,适用于没有显卡或仅使用 CPU 的机器。安装方式相对简单,无需额外配置 CUDA 或 GPU 驱动程序。使用方式与 GPU 版相同,唯一不同的是计算将自动在 CPU 上进行。 Pytorch的GPU版…

VBA学习(63):Excel VBA 数据分析展示/ListView控件/Combox组合框控件/CheckBox复选框控件/科目汇总表

前面我们分享了使用ListVeiw进行数据展示,做出“科目汇总表”来(Excel VBA 数据分析展示/ListView控件、Excel VBA 数据分析展示/ListView控件/Combox组合框控件/科目汇总表(2)),今天,我们继续完善按月查询、按一级科目…

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释 问题描述第一个奇怪的bug:新建的工程没有SoftMotion General Axis Pool选项第二个奇怪的bug:在新建工程SoftMotion General Axis Pool选项时,无法手动添加第三个奇怪的bug:虚…

Spring源码之refresh

1.refesh的核心介绍 在 Spring 框架中,refresh 主要用于刷新应用上下文。这一过程涉及多个重要的步骤,确保 Spring 容器的状态更新、bean 的加载以及资源的初始化。 refresh 方法的主要功能 初始化上下文: refresh 方法会初始化应用上下文&…

【项目实战】智能机械臂协同视觉辅助仓储物流管控平台

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

9月4日星期三今日早报简报微语报早读

9月4日星期三,农历八月初二,早报微语早读。 1、全球第二批100个地质遗产地公布,中国乌海、自贡、桂林等3地入选; 2、我国科学家在超高纯石墨领域取得重大突破; 3、2024上海百强企业榜单发布:入围门槛105…

小土堆pytorch

anaconda安装 pip list 可以看有哪些package包 nvidia-smi查看显卡的状态 安装pytorch 检验pytorch是否安装成功,以及是否pytorch是否可以使用gpu。 (1)查看conda版本 conda --version 或 conda -V (2)更新conda(将conda自身更新到最新版本) …