在之前的 BlogBlogBlog 中,我们学习了 8088/8086 CPU 内存管理的方式,也知道了逻辑地址的计算方法。既然我们知道了一个数据在内存里面的地址,那么下一步就是如何去找到它。因此,本文重点介绍 16 位 CPU的寻址方式。我们开始吧!

文章目录

  • 一、立即数寻址
  • 二、寄存器寻址
  • 三、存储器寻址
    • 3.1 直接寻址
    • 3.2 寄存器间接寻址
    • 3.3 基址寻址
    • 3.4 变址寻址
    • 3.5 基址变址寻址
    • 3.6 带位移的基址加变址寻址方式

一、立即数寻址

【立即数寻址】:这里比较简单,就是我们把一个数直接在指令里面给出来,然后把这个数赋值给目标操作数。我们举个例子:MOVAX,1234HMOV AX, 1234HMOVAX,1234H 这句话里面,1234H 就是我们的源操作数,这里它就仅仅只代表数,没有地址的意思。那么完成的就是把 1234H 赋值给 AX,其中:12H 放在 AH,34H 放在 AL

但是,一般这种寻址方式我们只会在赋初值的时候才会用。

二、寄存器寻址

寄存器寻址,就是我们不直接在指令里面给出源操作数,而是把这个源操作数放在一个寄存器里面,通过寄存器来赋值。

例如:MOVAX,BXMOV AX, BXMOVAX,BX 就是把通用寄存器 BX 里面存放的数据赋值给 AX。这里就需要注意 (源寄存器和目标寄存器的大小一定要相同)

三、存储器寻址

3.1 直接寻址

直接寻址的意思是,我们直接在指令里面给出源操作数的偏移地址,例如:MOVAX,[3000H]MOV AX, [3000H]MOVAX,[3000H]
这里,我们就给出了源操作数的偏移地址是 3000H,那么段地址去哪了?

在没有特殊声明时,默认数据都在数据段 DS,如果数据是在其他段,例如附加段 ES,那么需要通过段超越的方式:MOVAX,ES:[3000H]MOV AX, ES:[3000H]MOVAX,ES:[3000H]

下图所示过程执行的是指令:MOVAL,[2000H]MOV AL, [2000H]MOVAL,[2000H]

直接寻址看起来简单易懂,但是有一个大问题:假设我们要计算1+2+⋯\cdots⋯+100,假设 1 位于存储器的第100个单元,如果采用直接寻址的方式,我们首先:要写出第一个地址,赋值、再写第二个地址,赋值、再相加、继续写地址,赋值、、、、这样一来,这个简单的问题都快需要几百行指令了,这显然十分麻烦,因此也有了下面的寄存器间接寻址。

3.2 寄存器间接寻址

这里是通过把偏移地址放在寄存器中的寻址方式。用于存放数据在内存中的偏移地址的,只能有 4 个通用寄存器:BX, BP, SI, DI。
如果存放偏移地址的是寄存器:BX, SI, DI, 那么默认的段就是数据段 DS;
如果存放偏移地址的是寄存器:BP,那么默认的段就是 堆栈段 SS

例子:MOVAX,[BX]MOV AX ,[BX]MOVAX,[BX] 这就说明数据的偏移地址存放在 BX 里面,由于没有使用段超越,所以段默认是数据段 DS。但是这个例子里面取完数据赋值是有讲究的:

因为我们知道:16位 CPU 它这个内存单元一个就是 8位的,我们通过 [BX] 所访问到的就是一个存储单元,也就是说,我们只取出了1个数,这个数是 8 位的。但是想要赋值的寄存器 AX 是 16位的,因此这时,我们还需要再往下多取一个8位二进制数,作为高位,存放在 AH。

下图所示的过程执行的是指令:MOVAX,[BX]MOV AX ,[BX]MOVAX,[BX]


通过寄存器间接寻址,我们通过使寄存器自增,那么就可以构成循环,完成上面一节的问题

3.3 基址寻址

采用基址寻址时,我们的偏移地址是这样表示的:[基址寄存器] + 偏移量

这里,偏移量是一个常数,而能够存放基址的,只有 BP 和 BX。在使用 BX 时,默认的段就是数据段DS;在使用 BP 时,默认的段就是堆栈段 SS

例子:MOVAL,[BX+5]MOV AL, [BX+5]MOVAL,[BX+5]

下图所示过程展示的是指令:MOVAL,[BX+5]MOV AL, [BX+5]MOVAL,[BX+5]

3.4 变址寻址

上面我们采用的偏移地址表示是 [基址寄存器] + 偏移量,而在变址寻址中,我们偏移地址的表示就是:[变址寄存器] + 偏移量。

在16位变址寻址中,变址寄存器只能是 SI 、 DI,且它们都是默认段是 DS

变址寻址主要的目的是为了一维数组的操作,因为我们知道,要想访问一维数组,需要有表头,还要有数组内数据和表头的距离。那么我们常常用那个常数偏移量代表表头,有寄存器的变化代表数组内元素距表头的距离。

例子:MOVAH,[SI+5]MOV AH, [SI+5]MOVAH,[SI+5]

3.5 基址变址寻址

类似的,在这种寻址方式下,我们的偏移地址就表示成:[基址寄存器] + [变址寄存器]

基址+变址的目的是为了用于二重循环和对二维数组的操作。例如:MOVAX,[BX+SI]MOV AX, [BX+SI]MOVAX,[BX+SI]
说明:在这种寻址模式下,哪个段主要取决于基址寄存器

下图展示的是指令:MOVAX,[BX+SI]MOV AX, [BX+SI]MOVAX,[BX+SI]

3.6 带位移的基址加变址寻址方式

一样地,这里偏移地址的表示方式是:[基址寄存器]+[变址寄存器]+偏移量]
例如:MOVAX[BX+SI+0002H]MOV AX [BX+SI+0002H]MOVAX[BX+SI+0002H]

说明一下:上述的有一些寻址方式,例如:MOV[DI],ALMOV [DI], ALMOV[DI],AL这样写也是OK的,他的意思就是将 ALALAL 内部的值传送给 DIDIDI 里面存的地址所指向的内存单元。

【微机原理与接口 4】—— 寻址方法与指令系统 1(16位寻址方式解析)相关推荐

  1. 微型计算机硬盘接口主要分为,北京交通大学微机原理与接口技术_期末复习题_图文...

    北京交通大学微机原理与接口技术_期末复习题_图文 更新时间:2017/1/26 18:34:00  浏览量:1285  手机版 "微机原理与接口技术"2008年期末考试复习题 1. ...

  2. 微型计算机接口技术2018真题,2018年微机原理及接口技术复习题.doc

    2018年微机原理及接口技术复习题 2018年<微机原理及接口>复习题 填空题 1 .中断的响应过程. CPU与外设的输入.输出方式包括程序控制方式..DMA方式.8086存储器采用的是分 ...

  3. 微机原理与接口技术的基础知识

    微机原理与接口技术 微控制单元 (Microcontroller Unit:MCU) ,又称单片微型计算机 (Single Chip Microcomputer )或者单片机,是把中央处理器 (Cen ...

  4. 微型计算机BX和AX区别,微机原理及接口技术-习题答案

    微机原理及接口技术习题及答案 ·5· 第三章习题及答案 1. 什么叫寻址方式?8086指令系统中有哪几种寻址方式? 解:寻址方式,即获得地址的方法,主要指获得段内偏移地址的方法,段基址常采用默认方式获 ...

  5. 《微机原理与接口技术》简答题总结

    重点: 8086/8088.寻址方式.汇编指令.转移指令.中断.8253.8255.8259 必须知道的基础就不标★了 PDF打印版下载:微机原理简答题整理PDF版 一.8086/8088 1. 简述 ...

  6. 微机原理与接口技术--西安电子科技大学-笔记一

    微机原理与接口技术-西安电子科技大学 绪论 微型计算机系统组成 硬件子系统与软件 早期计算机硬件组成–ALU-----控制器控制ALU运算–ALU运算的数据 存储器中的数据被控制器控制器送到ALU 输 ...

  7. 《微机原理与接口技术》复习参考资料,期末考试和专接本适用

    <微机原理与接口技术>复习参考资料 复习资料说明: 1.标有红色星号""的内容为重点内容 3.本资料末尾附有"<微机原理与接口技术>综合练习题与答 ...

  8. 微型计算机原理指令系统,微机原理与接口技术 指令系统.ppt

    微机原理与接口技术 指令系统 第4章 指令系统 4.1 寻址方式 4.2 8086指令系统 4.3 从80286到Pentium 系列微处理器的指令系统 第4章 指令系统 指令:计算机用以控制各个部件 ...

  9. 微型计算机原理周明德答案,微机原理与接口技术周明德主编习题答案

    <微机原理与接口技术>试题(第一套) 一.选择题(每题3分,共30分) 1.8288在8086/8088组成的计算机中的作用是( ② ). ① 数据缓冲器 ② 总线控制器 ③ 地址锁存器 ...

最新文章

  1. 关于github failed to push some refs
  2. Mac OS X Git安装教程
  3. python控制其它软件_从另一个脚本控制python脚本
  4. vs2019使用sqlite数据库远程连接linux
  5. Laravel核心解读 -- 用户认证系统(基础介绍)
  6. python密码字典库_python生成密码字典的方法
  7. 这个用JAVA开发的全开源商城系统可免费商用
  8. 如何在UNIX系统下操作软盘
  9. IDEA 配置Go环境,编写Golang代码,学习笔记(一)
  10. Unity 生命周期 Reset() 的使用
  11. 我用Python分析1585家电商车厘子销售数据,发现这些秘密!
  12. 抹不掉的消费数字足迹!那些悄然消失的花呗额度……
  13. web应用的log4j配置
  14. YAD2K: Yet Another Darknet 2 Keras
  15. 乐视三合一体感摄像头(Orbbec Astra Pro)在ROS下安装使用
  16. web APIS DOM&&BOM
  17. 关于飞行堡垒 (FX50J)风扇狂转的问题
  18. IT故障排查思路和方法交流
  19. 【高数】高阶可降阶微分方程的解法?什么时候考虑把dx/dy换元(反函数高阶导数)?
  20. 人工智能导论-周苏作业答案

热门文章

  1. 详细区分offsetX,clientX,pageX,screenX,layerX和X的区别
  2. 解决Virtualbox安装系统界面显示不全问题
  3. 视频类APP体验报告
  4. Launcher壁纸来源
  5. 计算机操作系统(OS)安装机器人操作系统(ROS)实现物联网功能
  6. 最详细最直观的>>>理解Pandas分组聚合和透视图标
  7. java 转换html标签,java转化html标签
  8. POI实现EXCEL导出(resources配置路径下或者网络图片)
  9. vue+Element-ui table按照字母排序
  10. linux编辑搜索命令,Linux 命令大全提供 500 多个 Linux 命令搜索