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

news2024/12/26 11:15:16

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

寄存器间接寻址方式:在地址表达式中,只能使用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.coloradmin.cn/o/1444047.html

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

相关文章

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息维护模块UI设计实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

动态水印怎么加 怎么去除动态水印 视频剪辑软件 会声会影安激活序列号 会声会影怎么剪辑视频

为了防止白嫖或者增加美观效果,视频制作者可能会采用动态水印的方式,让其他人难以盗取视频使用。动态水印的添加,需要应用到运动路径功能。接下来,本文会教大家动态水印怎么加,怎么去除动态水印的相关内容。感兴趣的小…

力扣 第 383 场周赛 解题报告 | KMP

力扣 第 383 场周赛 解题报告 | KMP 链接 前言 一个人能走的多远不在于他在顺境时能走的多快,而在于他在逆境时多久能找到曾经的自己。 T1 修改矩阵 思路:模拟 时间复杂度: O ( m n ) O(mn) O(mn) class Solution:def modifiedMatrix(se…

一招搞定!Windows 右键秒建 Markdown 文件

创建Markdown文件(拓展名为.md)在Windows 10操作系统中并非内置功能。以下是一篇博客教程,指导用户如何实现在Windows 10中通过右键菜单新建Markdown文件的过程。 如何在Windows 10中通过右键菜单新建Markdown文件 Markdown是一种轻量级标记…

C#,欧拉常数(Euler Constant)的算法与源代码

1 欧拉常数 欧拉常数最先由瑞士数学家莱昂哈德 欧拉 (Leonhard Euler) 在1735年发表的文章《De Progressionibus harmonicus observationes》中定义。欧拉曾经使用γ作为它的符号,并计算出了它的前6位,1761年他又将该值计算到了16位 。 欧拉常数最先由瑞…

Open CASCADE学习|环形弹簧建模

目录 Draw Test Harness: C: 环形弹簧,也称为弓簧,是由拉伸弹簧和连接弹簧构成的。在结构上,环形弹簧通常包括端环、外环和内环,其主要参数包括弹簧的内径、外径和自由高度。环形弹簧的一个显著特点是&am…

MySQL篇----第二十篇

系列文章目录 文章目录 系列文章目录前言一、NULL 是什么意思二、主键、外键和索引的区别?三、你可以用什么来确保表格里的字段只接受特定范围里的值?四、说说对 SQL 语句优化有哪些方法?(选择几条)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

ECMAScript Modules规范的示例详解

ECMAScript Modules(ESM)是JavaScript中用于模块化开发的规范,它允许开发者将代码分割成多个独立的文件,以提高代码的可维护性和可重用性。下面是一个ECMAScript Modules规范的示例详解: 创建模块 1.1 导出变量 在一个…

低代码开发的数字化革新:实业界的成功秘诀与实践之路

在信息时代,实业界正迎来一场变革的风暴,传统的管理系统逐渐不再满足越来越复杂的生产流程和不断增长的市场需求,而低代码开发正如一颗璀璨的明星,将为企业带来前所未有的灵活性和创新力,这并非一场技术的简单变迁&…

React - 分页插件默认是英文怎么办

英文组件的通用解决方案 这里以分页插件为例: 大家可以看到,最后的这个页面跳转提示文字为Go to,不是中文,而官网里面的案例则是: 解决方案: import { ConfigProvider } from antd; import zhCN from an…

Java图形化界面编程——弹球游戏 笔记

Java也可用于开发一些动画。所谓动画,就是间隔一定的时间(通常小于0 . 1秒 )重新绘制新的图像,两次绘制的图像之间差异较小,肉眼看起来就成了所谓的动画 。 ​ 为了实现间隔一定的时间就重新调用组件的 repaint()方法,可以借助于…

Centos7之忘记Root用户密码的处理方式

Centos7之忘记Root用户密码的处理方式 文章目录 Centos7之忘记Root用户密码的处理方式1.场景描述2. 重置密码1. 重启系统进入编辑界面2. 按方向键下键↓,找到设置语言的地方3. 进入bash界面后,可以输入passwd命令重新设置root密码 1.场景描述 长时间未使…

vue中没有hooks

文章目录 一、前言二、啥是 hooks?三、React hooks 是什么?四、vue composition API 与 react hooks 的对比五、总结六、最后 一、前言 经常在网上看到有很多同学说:“在 Vue 中创建 hooks?提升 什么什么什么” 我每次看到这样的…

电商小程序07显示用户个人信息

目录 1 全局变量2 控制登录按钮显示3 设置布局4 搭建我的页面5 修改个人信息总结 在登录章节我们已经实现了用户名和密码登录首页的功能,在登录之后,可以切换到我的页面,显示用户的头像和名称,可以修改个人信息。本篇我们介绍一下…

机器学习系列——(十八)K-means聚类

引言 在众多机器学习技术中,K-means聚类以其简洁高效著称,成为了数据分析师和算法工程师手中的利器。无论是在市场细分、社交网络分析,还是图像处理等领域,K-means都扮演着至关重要的角色。本文旨在深入解析K-means聚类的原理、实…

【计算机网络】Web HTTP

Web和HTTP HTTP 超文本传输协议 HyperText Transfer Protocol HTTP使用TCP作为支撑传输协议 由一个客户程序和一个服务器程序实现一些常见名词。。。无状态协议 stateless protocol 不保存关于客户的任何信息非持续/持续链接 non-persistent con…

PKI - 借助Nginx 实现Https_使用CA签发证书

文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接…

Linux文本三剑客(2)

文章目录 一、Linux文本三剑客之awk使用方法awk 的原理实例一:只查看test.txt文件(100行)内第20到第30行的内容(企业面试)实例二:已知test.txt文件内容为 BEGIN 和 END 模块实例一:统计/etc/pas…

【C++】类的6个默认成员函数

目录 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 运算符重载 5.1运算符重载 5.2赋值运算符重载 5.3前置和后置重载 5.4日期类的实现 6. const成员函数 7. 取地址及const取地址操作符重载 1. 类的6个默认成员函数 对于一个空类,编…

echarts 曲线图自定义提示框

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…