【新书推荐】7.4节 寄存器间接和相对寻址方式

本节内容:当指令操作数为内存操作数,且内存操作数的地址使用指针寄存器表示时,称为寄存器间接寻址方式。

寄存器间接寻址方式:在地址表达式中,只能使用BX、SI、DI、BP四个指针寄存器用来寻址。

7.4.1 寄存器间接寻址方式

寄存器间接寻址方式的操作数在存储器中,操作数有效地址只能使用SI、DI、BX、BP四个寄存器。一般情况下,缺省段超越前缀,如果有效地址在SI、DI变址寄存器中,则默认段寄存器为DS。如果有效地址在BP堆栈基址指针寄存器中,默认段寄存器为SS。

图7-7 寄存器间接寻址方式

如图7-7所示:

假设:(DS)=5000H,(SI)=1234H。

MOV AX,[SI];意为将数据段SI(偏移地址1234H)处存储的值送入AX寄存器。存取的物理存储单元地址为51234H。如果该存储单元的内容是5678H,那么(AX)= 5678H。

在其他段中使用寄存器间接寻址方式:

MOV DL,CS:[BX]  ;将代码段CS内偏移地址BX处一个字节的值送入DL寄存器。

MOV [BP],CX    ;引用缺省段寄存器为SS,将CX寄存器的值送入堆栈段内偏移地址BP处。

寄存器间接寻址方式可以用于表格处理,只要修改指针寄存器的内容就可以方便的处理表中的另一项。

动手实验20:演示寄存器间接寻址方式

如图7-8所示,在debug调试器内输入:

mov si,1234H;将偏移地址1234H送入SI寄存器。

         mov ax,[si];将数据段si偏移地址处的值送入ax寄存器。

图7-8 演示寄存器间接寻址方式

谨慎

在书写表示寄存器间接寻址时,寄存器必须要放在方括号中。

如:MOV [SI],AX   ;将AX的值送入数据段内偏移地址SI处对应的存储空间

        MOV SI,AX    ;将AX寄存器的值送入SI寄存器

7.5节 寄存器相对寻址方式

         本节内容:寄存器相对寻址方式。

寄存器相对寻址方式:指令操作数为内存操作数,操作数的有效地址是一个基地址寄存器(BX,BP)或变址寄存器(SI,DI)加上指令中给定的8位或16位位移量之和。

7.5.1 寄存器相对寻址方式

寄存器相对寻址方式的操作数在存储器中,操作数的有效地址是一个基地址寄存器(BX,BP)或变址寄存器(SI,DI)加上指令中给定的8位或16位位移量之和。如图7-9所示:

图7-9 寄存器相对寻址方式地址表达式

通常BX,SI,DI引用数据段DS,BP引用堆栈段SS。

在指令中给定的8位或16位位移量如果是有符号整数,则采用补码形式表示。如果是8位有符号整数,则带符号位扩展成16位。

如果所得地址超出FFFFH,则取其64K(FFFFH)的模。

如图7-10所示:

图7-10 寄存器相对寻址方式

假设(DS)=5000H,(DI)=3456H。

MOV AX,[DI+1234H] ;那么内存操作数[DI+1234H]的物理地址为5468AH(5000H*16+3456H+1234H),(AX)=5678H。

动手实验21:演示寄存器相对寻址方式

如图7-11所示,在debug调试器内输入:

mov ax,5000H

mov ds,ax;将段值5000H赋给ds段寄存器。

mov word ptr [468ah],6789h;将6789H送入数据段偏移地址468aH处。

mov di,3456H;将偏移地址3456H送入di寄存器Mov ax,[di+1234H];将数据段偏移地址di+1234H地址处的值送入ax寄存器。

图7-11 寄存器相对寻址方式

在其他段中使用寄存器相对寻址方式:

MOV BX,[BP-4];默认引用SS段寄存器,将堆栈段BP-4偏移地址处存储的16位数存入BX。

MOV ES:[BX+5],AL  ;引用ES段寄存器,将AL的值存入附加段BX+5偏移地址处。

寄存器相对寻址方式通常用于表格处理,表格的首地址可设置为指令中的位移量,利用修改基址或变址寄存器的内容来存取表格中的项值。这种方式很有利于实现高级语言中对结构或记录等数据类型所实施的操作。我们将在后续课程的代码中反复练习。

提示

在书写基址或变址寄存器名一定要放在方括号中,而位移可不写在方括号中。如下两种方式等价:

    MOV AX , [SI+3]

    MOV AX,3[SI]

本文摘自编程达人系列教材《X86汇编语言基础教程》。资料下载www.bcdaren.com

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

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

相关文章

猫头虎分享已解决Bug || API限制超额(API Rate Limiting):RateLimitExceeded, APILimitReached

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

mysql入门到精通006-基础篇-多表查询

1、多表关系介绍 1.1 概念 项目开发中,在进行数据库表结构设计时,会根据业务需求和业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本上分为3种&#xf…

MongoDB聚合:$unwind

使用$unwind可以对输入文档数组字段进行结构,为每个数组元素输出一个文档,并且每个输出文档都是输入文档数组字段的值。相当于将内嵌的数组文档提升到了顶层。 语法 可以通过字段路径或文档操作符来展开数组字段。 通过字段操作符展开 可以将数组字段…

如何用 docker 部署程序?

如何用 docker 部署程序?这个问题有点笼统。 如果是MySQL、Redis这些,只需要拉取镜像,然后设置必要的配置,最终创建并运行实例即可。 如果你的应用是一个Java应用程序,使用Docker来部署它会涉及到Java特有的一些考虑…

c# Config 配置文件帮助类

public class ConfigHelper { #region 获取指定目录 AppSettings 配置文件值 /// <summary> /// 获取指定目录 AppSettings 配置文件值 /// </summary> /// <param name"key"></param> /// <…

LeetCode.144. 二叉树的前序遍历

题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目&#xff0c;我们首先要知道二叉树的前序遍历是什么&#xff1f; 就是【根 左 右】 的顺序&#xff0c;然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现…

片上网络NoC(1)——导论

一、多核时代的出现 自从20世纪90年代末引入多核芯片研究以来&#xff0c;片上网络已经成为一个重要且不断发展的研究领域。随着计算核心数量的不断增加&#xff0c;多核处理器被广泛应用在高端服务器、智能手机&#xff0c;甚至物联网&#xff08;Internet of Things,IoT)网关…

Microsoft Word 清除格式

Microsoft Word 清除格式 References 选择文本&#xff0c;用快捷键 Ctrl Shift N&#xff0c;可以快速清除格式。 选择文本&#xff0c;清除格式。 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

System V信号量

1.信号量 信号量本质上就是一把计数器(资源计数器) 表示资源数目的计数器,每一个执行流想访问公共资源内部的某一份资源&#xff0c;不应该让执行流先访问,而是先申请信号量资源,其实就是先对信号量计数器进行–操作,本质上,只要–成功&#xff0c;就完成了对资源的预订机制 如…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中…

Ubuntu编译和测试ITK4.13.1

安装不麻烦&#xff0c;环境配置挺麻烦&#xff0c;主要是gcc、cmake和ccmake的版本不匹配问题。 环境&#xff1a; gcc -- 7.5.0 cmake -- 3.15.2 ccmake -- 3.15.2 参考以下两篇博客安装&#xff1a; 1、 ITK的安装与测试&#xff08;Ubuntu系统&#xff09;_ubuntu20…

Confluence CVE-2023-22527利用工具

介绍 Confluence CVE 2021&#xff0c;2022&#xff0c;2023 利用工具&#xff0c;支持命令执行&#xff0c;哥斯拉&#xff0c;冰蝎 内存马注入 支持 Confluence 版本&#xff1a;CVE-2021-26084&#xff0c;CVE-2022-26134&#xff0c;CVE_2023_22515&#xff0c;CVE-2023-2…

计算机网络——06分组延时、丢失和吞吐量

分组延时、丢失和吞吐量 分组丢失和延时是怎样发生的 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排到队头、被传输 延时原因&#xff1a; 当当前链路有别的分组进行传输&#xff0c;分组没有到达队首&#xff0c;就会进行排队&#xff0c;从…

【MySQL进阶之路】生产案例:大量数据刷盘导致的数据库性能抖动问题优化

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【Docker】Docker Container(容器)

文章目录 一、什么是容器&#xff1f;二、为什么需要容器&#xff1f;三、容器的生命周期容器OOM容器异常退出容器暂停 四、容器命令详解docker createdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker cont…

Apache 神禹(shenyu)源码阅读(一)——Admin向Gateway的数据同步(Admin端)

源码版本&#xff1a;2.6.1 单机源码启动项目 启动教程&#xff1a;社区新人开发者启动及开发防踩坑指南 源码阅读 前言 开了个新坑&#xff0c;也是第一次阅读大型项目源码&#xff0c;写文章记录。 在写文章前&#xff0c;已经跑了 Divide 插件体验了一下&#xff08;体…

Mac OS 取消隔离扩展属性

sudo xattr -rd com.apple.quarantine ${file} 扩展属性的大小通常被限制为明显小于最大文件大小的值。典型用途包括存储文档的作者、纯文本文档的字符编码或校验和、加密哈希或数字证书和自主访问控制信息。 在类 Unix系统中&#xff0c;扩展属性通常缩写为xattr。 从 macO…

elasticsearch 索引的监控

** 1. 监控索引的健康状态信息 ** 如果创建了一个索引test-3-2-1并且你想知道索引test-3-2-1的健康状态可以使用索引的cat端点&#xff0c;代码如下。 GET /_cat/indices/test-3-2-1?v&formatjson会得到类似于以下的健康状态监控信息 [{"health" : "ye…

DataEase

一. DataEase (一). 说明 安装文档 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。DataEase 支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便的与他人分…

比特币突然大涨

作者&#xff1a;秦晋 2月9日&#xff0c;除夕夜&#xff0c;比特币突然大涨&#xff0c;最高涨至48219美元&#xff0c;涨幅超6%。据CNBC报道&#xff0c;本周比特币已经上涨10.76%&#xff0c;创下自12月8日以来的最佳的一周。本周ETH上涨8.46%&#xff0c;成为自1月12日以来…