学向勤中得,萤窗万卷书。这篇文章主要讲述实模式与保护模式详解三:寻址方式相关的知识,希望能为你提供帮助。
操作数的存放点
寻找操作数物理地址的方式叫寻址方式
- 操作数在指令中
指令的操作数部分就是操作数本身
也叫立即数 - 操作数存放在CPU寄存器中
指令的操作数部分是寄存器的编码
也叫寄存器操作数 - 操作数存放在内存中
指令的操作数部分包含操作数所在的内存地址
也叫储存器操作数
- 立即数寻址
e.g.
???MOV AL, 10H?
?特点:操作数直接放在指令中 - 寄存器寻址
???INC SI?
?特点:指令中需给出寄存器名,寄存器中的内容即为操作数 - 储存器寻址方式
- 直接寻址
例子
??MOV AL,[2000H] ; AL ← PA=DSx16+2000?
?特点: p指令中直接给出有效地址EA:8位或16位位移量。 PA = (段寄存器)X 10H +指令中的EA 。 默认方式下:段寄存器是数据段DS。段跨越:指令增加段寄存器名前缀:CS,ES,SS等 - 寄存器间接寻址方式
例子
??MOV AX,[SI] ; AX ← DSx16 + [SI],[SI+1]?
???MOV BH,[BP] ; BH ← SSx16 + BP?
???MOV CX,ES:[BX] ; 将ES段[BX][BX+1]内容送CL,CH?
?特点: 操作数的有效地址EA在寄存器中。 对16位寻址,EA只能放在DI、SI、BX、 BP中 ,若EA在DI、SI、BX中,默认段为数据段DS ,若EA在BP中,默认段为堆栈段SS ,支持段跨越。 - 寄存器相对寻址方式
例子
??MOV AX, [BX+10H] ; EA=(BX)+10H?
?特点 :给定基址/变址寄存器和相对偏移量,两者之和为EA。 寄存器BX、SI、DI默认是数据段DS,寄存器BP默认堆栈段SS。 支持段跨越。 - 基址变址寻址方式
例子
??MOV AX, [BX+SI] ; EA=(BX)+(SI) ; DS段?
?特点:有效地址EA是基址寄存器与变址寄存器的和。 默认段由基址寄存器决定。 支持段跨越。 - 相对基址变址寻址方式
特点 :有效地址EA是基址寄存器+变址寄存器+偏移量三者之和。 基址寄存器可取BX或BP,变址寄存器可取SI或DI。 段寄存器由基址寄存器决定 p基址寄存器是BX,则默认段为DS; p基址寄存器是BP,则默认段为SS。
4. 一条指令的原操作数与目的操作数不能同时用存储器方式表示
如:
MOV [EAX + 4], DS:[100]
MOV [SI], [DI]
5. 双操作数有一操作数为立即数方式时,立即方式只能用于源操作数
6. 两个操作数的类型都明确时,源操作数不能比目标操作数长度要相同。不含变量的存储器方式类型是不明确的,立即数时没有类型的。当两个操作数类型都不明确时,需要用属性定义算符PTR指明其中一个操作数类型
【实模式与保护模式详解三(寻址方式)】
推荐阅读
- Springboot+vue房屋租赁租房系统毕业设计
- java校园篮球联赛管理系统
- JVM系列 从一到掌握JVM系列之JVM 概述篇
- 华硕笔记本安装Ubuntu20.04
- MySQL中一定记得用not null,不然你就只能滚蛋!
- unzip命令解压报错(error: invalid zip file with overlapped components)
- Java架构师必须知道的JVM类加载机制,这都不懂趁早放弃吧!
- windows下创建本地git仓库
- Tomcat的优化及OOM问题