前言
点赞再看,养成习惯!
该系列博文基于王爽老师 <汇编语言 第四版> 一书,需要的同学链接自取:
链接:https://pan.baidu.com/s/1NAgD1Z15LtK1BuH92xmICA
提取码:xlzb
另外书中提到的DosBox软件不想去官网下载的小伙伴也可以自取:
链接:https://pan.baidu.com/s/1O6PnLb_hN-WUS2avicNpcw
提取码:xlzb
最后如果还没有计算机基础的同学,建议先补充下计算机相关的基础知识:
一、[bx+idata]
之前我们提到了可以通过[bx]的方式来访问指定内存单元的数据,比如:
# 简单解释下DOSBOX命令逻辑
1. 通过R ds 修改DS寄存器值 更正后值为2000
2. 通过E指令编辑指定内存区域数据
3. 通过D指令查看指定区域数据
4. 通过A指令编译命令
5. 通过T指令运行指令
我们通过之前的学习可以知道,计算机访问指定内存单元数据等方式为: 段地址+偏移地址的形式。那我们观察上图可以得知,当我们使用[bx]形式访问数据的时候,bx寄存器的值会被当做偏移地址使用,而ds段寄存器中的值则会被当作地址段使用。这样我们就可以通过修改bx寄存器的值来达到动态的访问某内存单元的目的。当然,我们还可以进一步使用更加灵活的方式,我们可以通过bx+idata的形式来代表某一偏移地址。比如:
二、SI和DI
SI和DI都是变址寄存器的一种。
SI: 源变址寄存器(source index),用来存放相对于DS地址段的源变址量。
DI:目标变址寄存器(destination index),用于存放相对于ES段地址的目标变址量。
理论概念通常看起来都会让人头大,其实我们可以简单的做一个理解,SI和DI都是类似于BX基寄存器的寄存器,只不过SI和DI不支持再拆分为两个8位的寄存器来使用。比如我们可以这么来使用si寄存器:
我们进一步的开展推测,之前我们提到过可以通过[bx+idata]的方式表示偏移地址,那是不是也可以通过[si+idata]的方式表示偏移地址呢?我们来验证下:
那么我们大胆的猜测下,既然[bx+idata]和[si+idata]的方式都支持,那我是不是可以通过[bx+si]的方式来访问数据呢?我们来验证下:
三、寻址方式总结
我们来总结下我们已经学习过的寻址方式:
1. [idata]方式:通过一个常量来表示地址,可用于直接定位一个内存单元
2. [bx]方式:可以将某一变量赋予bx寄存器,可用于间接定位一个内存单元
3. [bx+idata]方式:用一个变量和常亮表示地址,可在一个起始地址基础上用变量简介定位一个内存单元
4. [bx+si]方式:用两个变量和一个常量表示地址
结语
今天的内容就到此结束了,有疑问的小伙伴欢迎评论区留言或者私信博主,博主会在第一时间为你解答。
Spring通用架构及工具已上传到gitee仓库,需要的小伙伴们可以自取:
https://gitee.com/xiaolong-oba/common-base
屏幕前努力学习的你如果想要持续了解博主最新的学习笔记或收集到的资源,可以关注博主的个人公众号。这里有很多最新的技术领域PDF电子书及好用的软件分享
码字不易,感到有收获的小伙伴记得要关注博主一键三连,不要当白嫖怪哦~
如果大家有什么意见和建议请评论区留言或私聊博主,博主会第一时间反馈的哦。