8086寄存器和7种寻址方式
1. 8086处理器有以下寄存器:
类别 |
位数 |
名称 |
通用 |
16 |
AX, BX, CX, DX |
8 |
AH,AL,BH,BL,CH,CL,DH,DL |
|
指针 |
16 |
SP(stack pointer,堆栈指针),BP(base pointer,基址指针) |
索引(变址) |
16 |
SI(source index,源索引),DI(destination,目的索引) |
段 |
16 |
CS(code segment,代码段),DS(data segment,数据段), SS(stack segment,堆栈段),ES(extra segment,附加段) |
指令 |
16 |
IP(instruction pointer,指令指针/指令计数器) |
标志 |
16 |
FR(flag register,标志寄存器) |
其中:
1). 段寄存器CS,DS,SS,ES分别保存端代码段,数据段,堆栈段,辅助数据段的起始地址,段寄存器只能由其他寄存器载入值,不能由主存直接载入.
2). 基址寄存器BX,SP,BP用于保存相对段首地址的偏移地址,其中BX的默认段寄存器是DS,而SP,BP的默认段寄存器是SS.
3). 索引寄存器(又叫变址寄存器)SI,DI,既可用于存放存储单元在段内的偏移量,又可用于存放在相对于段内偏移量的偏移量(详见下文寻址方式).
4). 操作数相对于段首的偏移地址又称有效地址.
(参考自《x86 PC 汇编语言,设计和接口》)
2. 7种寻址方式(参考自http://student.zjzk.cn/course_ware/caiweb/huibian/Chap2/chap2-2-11.htm)
1). 立即数寻址方式
操作数作为指令的一部分,紧跟在操作码之后,该寻址方式执行得很快.
将信息装载到除了段寄存器和标志寄存器以外的寄存器:
MOV AX,2550H ;将2550H装入AX MOV CX,625 ;将十进制数625装入CX MOV BL,40H ;将40H装入BL
要将信息移到段寄存器,必须现将数据装载到通用寄存器,再移到段寄存器:
MOV AX,2550H MOV DS,AX ;正确 MOV DS,2550H ;错误
2). 寄存器寻址方式
操作数在寄存器中,指令指定寄存器号.16位操作数的寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP等;8位操作数的寄存器可以是 AL,AH,BL,BH,CL,CH,DL,DH等.寄存器寻址方式和立即数寻址方式不涉及内存访问,因而可以取得较高的运算速度.
如:
MOV BX,DX ;将DX的内容复制到BX MOV ES,AX ;将AX中的内容复制到ES ADD AL,BH ;将BH中的内容加到AL
3). 直接寻址方式
操作数在内存,但操作数的有效地址作为指令的一部分,紧跟在操作码之后.默认段寄存器为DS().
如:
MOV DL,[2400] ;将DS:2400H的内容移到DL MOV [3518],AL ;将AL的内容移到DS:3518H
4). 寄存器间接寻址方式
操作数在内存,但操作数的有效地址由SI,DI,BX,BP指定,其中SI,DI,BX默认的段寄存器是DS,BP默认的段是SS.
如:
MOV CL,[SI] ;将DS:SI中的内容移到CL MOV [DI],AH ;将AH的内容移到DS:DI
5).寄存器相对寻址方式
操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和.
如:
MOV CX,[BX]+10 ;[BX]+10也可以写作[BX+10]或10[BX] MOV AL,[BP]+5 MOV DX.[SI]+5
6). 基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,默认段寄存器为基址寄存器的默认段寄存器.
如:
MOV CL,[BX][DI] ;将DS:BX+DI的内容移到CL
7). 相对基址变址寻址方式(Relative based indexed addressing)
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之和,这种寻址方式为像数组元素遍历等堆栈处理提供了方便.
如:
MOV CL,[BX][DI]+8 ;将DS:BX+DI+8的内容移到CL,[BX][DI]+8也可以写作[BX+DI+8] MOV CH,[BX][SI]+20