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
View Code

    要将信息移到段寄存器,必须现将数据装载到通用寄存器,再移到段寄存器:

MOV AX,2550H
MOV DS,AX       ;正确
MOV DS,2550H    ;错误
View Code

    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
View Code

    3). 直接寻址方式

    操作数在内存,但操作数的有效地址作为指令的一部分,紧跟在操作码之后.默认段寄存器为DS().

    如:

MOV DL,[2400]    ;将DS:2400H的内容移到DL
MOV [3518],AL    ;将AL的内容移到DS:3518H
View Code

     4). 寄存器间接寻址方式

     操作数在内存,但操作数的有效地址由SI,DI,BX,BP指定,其中SI,DI,BX默认的段寄存器是DS,BP默认的段是SS.

     如:

MOV CL,[SI]    ;将DS:SI中的内容移到CL
MOV [DI],AH   ;将AH的内容移到DS:DI
View Code

     5).寄存器相对寻址方式

     操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和.

     如:

MOV CX,[BX]+10    ;[BX]+10也可以写作[BX+10]或10[BX]
MOV AL,[BP]+5
MOV DX.[SI]+5
View Code

    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
View Code
posted @ 2015-10-19 22:06  Reasno  阅读(2652)  评论(0编辑  收藏  举报