最近学8086汇编,被各种各样的寄存器和寻址方式搞疯了,总结一下
8086共有14个寄存器,每个寄存器都是16位,可以分为通用寄存器,段寄存器,控制寄存器三大类
通用寄存器(8个):
AX,BX,CX,DX为数据寄存器
AX 累加寄存器
BX 基址寄存器
CX 计数器寄存器
DX 数据寄存器
SI,DI为变址寄存器
SI 源变址寄存器
DI 目的变址寄存器
SP,BP为指针寄存器
SP 堆栈指针寄存器
BP 基址指针寄存器
段寄存器(4个)
DS 数据段寄存器
CS 代码段寄存器
SS 堆栈段寄存器
ES 附加段寄存器
控制寄存器(2个)
IP 指令指针寄存器
FLAG 标志寄存器
接下来就是80x86的寻址方式了,比较多,有7种。。。。。
1.立即数寻址方式(不需要段寄存器):寻址操作数直接出现在指令中的寻址方式
mov al,05h
2.寄存器寻址方式(不需要段寄存器):寻址操作数存放在CPU内部的寄存器中的寻址方式
mov ax,bx
3,直接寻址方式(需要段寄存器):寻址操作数放在存储器中,操作数有效地址EA有指令直接给出的寻址方式,即mov ax,[EA]
mov ax,[3700H] 其默认的段地址为DS,也可以加以说明,比如
mov ax,es[3700H]
4.寄存器间接寻址方式(需要段寄存器):寻址操作数的有效存放在寄存器中的寻址方式
mov ax,[bx] 其默认的段地址为DS,也可以加以说明,比如
5.寄存器相对寻址方式(需要段寄存器):寻址操作数由存放EA的寄存器与指令中指示的8为或16位立即数构成的寻址方式,存放EA的寄存器可以有SI,DI,BX,BP
mov al,[bx+0400h] 其默认的段地址为DS
6.基址变址寻址方式(需要段寄存器):寻址操作数由一个基址寄存器内容和一个变址寄存器的内容之和的寻址方式
mov ax,[bx+di] 其默认的段地址为DS
7.相对基址变址寻址方式(需要段寄存器):寻址操作数有一个基址寄存器内容,一个变址寄存器内容以及指令中给出的立即数作为偏移量
mov ax,[bx+si+0400H] 其默认的段地址为DS
好吧,总算完了,但是还有一些寄存器的组合可能不能使用,之后再写吧