8086/8088 寻址方式
作者:黑剑
出处:http://www.cnblogs.com/blacksword/
8086/8088 寻址方式
这一节讲解8086/8088寻址方式,所谓寻址方式,就是寻找操作数或操作数地址的方式。
寻址方式
8086/8088有七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。
其中,后五种寻址方式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址)属于存储器寻址,用于说明操作数或操作数地址所在存储单元的地址。这五种方式也就是确定存放操作数的存储单元有效地址EA的方法,这里所说的有效地址就是在前面一节讲存储器分段中所说的段内偏移地址。
除了这些基本的寻址方式以外,还有固定寻址和I/O端口寻址等,但不会在本节中介绍到。
基本寻址方式
下面重点说一下这七种基本寻址方式的特点:
1. 立即寻址方式
先解释一个概念,叫做立即数。
操作数包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数。
立即寻址方式所提供的操作数紧跟在操作码后面,与操作码一起放在指令代码段中,不需要到其他地址单元中去取。立即数可以是8位,也可以是16位。这种寻址方式主要用于给寄存器或存储单元赋初值的场合。立即寻址方式是这七种寻址方式中速度最快的寻址方式。
举例:MOV AX, 1234H ; 给AX寄存器赋值为1234H
2. 寄存器寻址方式
寄存器寻址的特点是操作数在CPU内部的寄存器中,在指令中指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI和SP等;
对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。
例如:MOV SI, AX
MOV AL, DH
由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采用寄存器寻址方式的指令执行速度较快。
3. 直接寻址方式
直接寻址的操作数在存储器中,指令直接包含有操作数的有效地址。由于操作数一般存放在数据段,所以操作数的地址由DS加上指令中给出的16位偏移得到。
假如DS内容是5000H,地址为51234H字存储单元中的内容时6789H,那么在执行“MOV AX, [1234H]”后寄存器AX的内容是6789H。
由于该指令所用的段寄存器为DS,所以该条指令还可以写为"MOV AX, DS:[1234H]"。
当然,除了DS段寄存器以外,还可以指定其他段寄存器。
例如:MOV ES:[5678H], BL ; 指定ES作为段寄存器
这种寻址方式常用于处理单个存储器变量的情况。它可以实现在64K字节的段内寻找操作数。直接寻址的操作数通常是程序使用的变量。
4. 寄存器间接寻址方式
寄存器间接寻址的操作数在存储器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器的内容为段值;如果有效地址在BP中,则以SS段寄存器的内容为段值。
例如:MOV AX, [SI] ; 自动引用DS作为段寄存器
假设 (DS)= 5000H, (SI)= 1234H
那么存储的物理存储单元地址是51234H。再设该字存储单元的内容是6789H,那么在执行该指令后,(AX)= 6789H。
当然也可以指定段超越前缀,如:
MOV DL, CS:[BX] ;引用的段寄存器是CS
如果有效地址在BP中,那么引用的段寄存器为SS。如:
MOV [BP], CX ;此时引用的段寄存器是SS
这种寻址方式可以用于表格处理,在处理完表中的一项后,只要修改指针寄存器的内容就可以方便地处理表中的另一项。
注意同寄存器寻址方式的书写方式予以区别。
5. 寄存器相对寻址方式
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器的(SI、DI)内容加上指令中给定的8位或16位位移量之和。
即 EA = (BX)或(BP)或(SI)或(DI) + 8位或16位位移量
在一般情况下,如果SI、DI或BX的内容作为有效地址的一部分,那么引用的段寄存器是DS。如:
MOV AX, [DI+1223H] ; 引用的段寄存器是DS
假设,(DS)= 5000H,(DI)= 3678H。
那么,存取的物理存储单元地址是5489BH。再假设该字存储单元的内容是55AAH,那么在执行该指令后,(AX)= 55AAH。
而当BP的内容作为有效地址一部分时,那么引用的段寄存器是SS,如:
MOV BX, [BP-4] ; 引用的段寄存器是SS
当然也可以自行指定段寄存器,如:
MOV ES:[BX+5], AL ; 引用ES作为段寄存器
这种寻址方式同样可用于表格处理,表格的首地址可设置为指令中的位移量,利用修改基址或变址寄存器的内容来存取表格中的项值。
以下两种写法等价:
MOV AX, [SI+3]
MOV AX, 3[SI]
6. 基址变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。
即:EA = (BX)或(BP) + (SI)或(DI)
在一般情况下,如果BP的内容作为有效地址的一部分,则以SS的内容作为段值,否则以DS的内容作为段值。
当所得的有效地址超过FFFFFH时,就取其64K的模。
例如: MOV AX, [BX+DI] ; 此时引用DS段寄存器
假设,(DS)= 5000H,(BX)= 1223H, (DI)= 54H
那么,存取的物理存储单元地址是51277H。再假设改字存储单元的内容是168H,那么在执行该指令后,(AX)= 168H
当然,还可以增加段超越前缀来指定段寄存器。
例如:
MOV AX, ES:[BX+SI] ; 引用ES作为段寄存器
MOV DS:[BP+SI], AL ; 引用DS作为段寄存器
这种寻址方式适用于数组或表格处理。用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素,或反之。
另外,以下两种表示方法是等价的:
MOV AX, [BX+DI]
MOV AX, [DI][BX]
7. 相对基址变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的8位或16位位位移量相加得到。
即:EA = (BX)或(BP) + (SI)或(DI) + 8位或16位位移量
在一般情况下,如果BP作为有效地址的一部分,则以SS段寄存器的内容为段值,否则以DS段寄存器的内容为段值。
在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如果偏移量是8位,那么被带符号扩展成16位。当所得的有效地址超过FFFFH时,就取其64K的模。
举例:MOV AX, [BX+DI-2] ; 自动引用DS作为段寄存器
假设,(DS)= 5000H,(BX)= 1223H, (DI)= 54H
那么,存取的物理存储单元地址是51275H。再设该字存储单元的内容是7654H,那么在执行该指令后,(AX)= 7654H
以下四种表示方法均是等价的:
MOV AX, [BX+DI+1234H]
MOV AX, 1234H[BX+DI]
MOV AX, 1234H[BX][DI]
MOV AX, 1234H[DI][BX]
尽管相对基址变址这种寻址方式最复杂,但也是最灵活的。
8086/8088 寻址方式相关推荐
- 8086/8088 寻址方式补充篇
作者:黑剑 出处:http://www.cnblogs.com/blacksword/ 8086/8088 寻址方式补充篇 上一节讲述了8086/8088 CPU寻址方式,通过了解它的寻址方式会使得 ...
- 微机笔记2——8086/8088指令系统
8086/8088寻址方式 寄存器寻址 操作数存放在寄存器中 立即寻址 操作数存放在内存代码段 直接寻址 操作数存放在内存 寄存器间接寻址 操作数存放在内存 变址寻址 操作数存放在内存 基址加变址寻址 ...
- 微机原理8086/8088——指令系统与寻址方式
微机原理8086/8088概念系列 微机原理8086/8088--微型计算机组成 微机原理8086/8088--微处理器功能结构 微机原理8086/8088--内部寄存器 微机原理8086/8088- ...
- 8086/8088 存储器分段概念
这一节主要讲述8086/8088 存储器分段的概念. 目的 从8086 CPU开始采用了分段的方法管理存储器,只有充分理解存储器分段的概念和存储器逻辑地址和物理地址的关系,才能有助于我们掌握8086/ ...
- 1MB等于多少BYTE?8086/8088寻址段地址与偏移地址解释
8086/8088有20条地址线,它的直接寻址能力为1MB.也就是在一个系统中可以有多达1MB的存储器,地址从00000H-FFFFFH.给定任意一个20位物理地址,就可以从中取出需要的指令和操作数. ...
- 汇编语言之8086/8088指令系统
Typist : Akame Qixisi / Excel Bloonow 在我学习汇编语言(基于8086)的过程中,遇到过一些想要某些操作却不知道指令的情况,所以在这里统一记录一下.如有错误或不同观 ...
- 8086汇编语言寻址方式、基本指令和调试指令
一.80x86/Pentium 各种寻址方式 1.立即寻址 立即寻址方式下,操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起 存放在代码段区域.因此,立即数总是和操作码一起被存入 CPU 的 ...
- 【沧海拾昧】微机原理:8086/8088中断系统
#C0305 沧海茫茫千钟粟,且拾吾昧一微尘 --<沧海拾昧集>@CuPhoenix [阅前敬告] 沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系 如有问题定为本集记录有谬, ...
- 8086/8088 CPU寄存器组
作者:黑剑 出处:http://www.cnblogs.com/blacksword/ 8086/8088 CPU寄存器组 今天来回顾一下8086/8088 CPU寄存器组的知识.其实8086汇编还 ...
最新文章
- 不知道什么时间收集的code
- LabVIEW目标测量方法(基础篇—12)
- 038_Unicode对照表四
- java统计日志qps_【原创】基于日志增量,统计qps,并基于ip排序
- Opencv模块功能介绍
- boost::math::arcsine用法的测试程序
- python朴素贝叶斯_Python实现的朴素贝叶斯分类器示例
- 第十五期:真相了,中台到底“出路”还是“末路”?
- microsoft visual c++全家桶_Adobe 2020 MAC全家桶最新版不闪退
- 杂项-Server:Serv-U
- 认识ruquest对象
- android+3.1.2+imagebutton监听,button以及Imagebutton的使用
- 未来已来,如何成为一名人工智能产品经理
- P1157 组合的输出(#define mian main)
- openwrt 中 Luci 的简单使用
- 阿里、京东、字节跳动春招,Java岗offer不好拿?一文带你搞定
- AppInventor 模拟器与AI伴侣 问题
- python找出3或者5的倍数_python – 3和5的倍数之和
- 局域网arp攻击_图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”...
- 计算机网络——(6)网络互联技术与设备
热门文章
- 友盟集成第三方分享和登录
- stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...
- caj转换成word转换器下载后如何操作?
- 面试刁难题——你有哪些缺点?
- 博客大赛,我的一场生意一场梦
- The request was rejected because the URL contained a potentially malicious String “;“问题的正确解决姿势
- git FreshMan指南,五分钟上手(图解)
- 腾讯音乐知识图谱搜索实践
- Java基础:反射的详细介绍与使用
- 数据科学家应当了解的五个统计基本概念