8086寻址方式
CPU寄存器#
8086 CPU 中寄存器总共为 14 个,且均为 16 位 。
即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。
而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。
通用寄存器:#
AX,BX,CX,DX 称作为数据寄存器:
-
AX (Accumulator):累加寄存器,也称之为累加器;
-
BX (Base):基地址寄存器;
-
CX (Count):计数器寄存器;
-
DX (Data):数据寄存器;
可以分为两个独立的 8 位的 AH(BH, CH, DH) 和 AL(BL, CL, DL) 寄存器
SP 和 BP 又称作为指针寄存器:
-
SP (Stack Pointer):堆栈指针寄存器;
-
BP (Base Pointer):基指针寄存器;
SI 和 DI 又称作为变址寄存器:
-
SI (Source Index):源变址寄存器;
-
DI (Destination Index):目的变址寄存器;
控制寄存器:
-
IP (Instruction Pointer):指令指针寄存器;
-
FLAG:标志寄存器;
段寄存器:
-
CS (Code Segment):代码段寄存器;
-
DS (Data Segment):数据段寄存器;
-
SS (Stack Segment):堆栈段寄存器;
-
ES (Extra Segment):附加段寄存器;
操作数寻址#
立即寻址#
示例:
MOV AX, 1234H ; 给AX寄存器赋值为1234H
直接寻址#
示例;
MOV BX, DS:[2000H]
操作数存放在存储器中, 偏移量直接写在操作数中,.
地址为数据段寄存器DS的值* 16 (<<4)然后加上直接给出的偏移量2000H.
寄存器寻址#
示例:
MOV DX, AX ;将AX中的值赋给DX
直接使用寄存器中的值作为操作数, 速度较快.
寄存器间接寻址#
操作数存放在存储器中, 16位偏移地址存放在SI, DI, BP, BX四个寄存器之一中.
若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中.
即地址为:DS *16 + BX
示例:
MOV AX, [SI] ; 将DS*16 + SI中的值放入AX中
若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.
示例:
MOV AX, [BP] ;将SS*16 + BP中的值放入AX中
可以直接指定使用的段寄存器:
MOV AX, SS:[SI] ;将SS*16 + SI中的值放入AX中
寄存器相对寻址#
操作数存放在存储器中, 使用段寄存器内容* 16 加SI, DI, BP, BX四个寄存器之一的内容再加直接给出的位移量.
若使用BX, SI, DI之一作为寄存器, 操作数默认放在DS所决定的数据段中; 若使用BP做间接寻址, 操作数默认放在SS决定的堆栈段中.
与寄存器间接寻址相比只是增加了直接给出的偏移量:
示例:
MOV AX, [SI-2] ; 将 DS*16 + SI - 2中的值放入AX中
MOV AX, [BP+4] ;将 SS*16 + BP + 4中的值放入AX中
MOV AX, SS:[SI-8] ;将 SS*16 + SI - 8中的值放入AX中
基址变址寻址#
将段地址寄存器的值*16加上基址寄存器(BX,BP)之一的地址加上变址寄存器(SI, DI)之一的值作为地址.
若使用BX作基址 操作数默认放在DS所决定的数据段中; 若使用BP做基址, 操作数默认放在SS决定的堆栈段中.
示例:
MOV AX, [BX][SI] ; 将 DS*16 +BX + SI中的值放入AX中
MOV AX, [BP][DI] ;将 SS*16 + BP + DI 中的值放入AX中
MOV AX SS:[Bx][SI] ;将 SS*16 + BX + SI 中的值放入AX中
基址变址相对寻址#
在基址变址寻址基础上再加一个直接给出的偏移量:
示例:
MOV AX, 1234H[BX][DI] ;将DS * 16 + BX + DI + 1234H中的值放入AX中.
还有几种表示方法与上式等价:
MOV AX, [BX+DI+1234H]
MOV AX, 1234H[BX+DI]
MOV AX, 1234H[BX][DI]
作者:finley
出处:https://www.cnblogs.com/Finley/p/5573477.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!