您的位置:首页 > 其它

汇编(三)——8086的寻址方式

2008-01-28 10:14 218 查看
令由操作码和操作数两部分组成。操作码说明计算机要执行哪种操作,是指令中不可缺少的部分。操作数是指令执行的参与者,即各种操作对象。

用助记符表达的指令格式通常为:
操作码 操作数1,操作数2 ;注释
双操作数中,操作数2称为源操作数,操作数1称为目的操作数。
一、8086的机器代码格式
8086的机器代码(Machine Code)格式,操作码占1个或2个字节,后面的各个字节知名操作数。其中“mod reg r/m”字节表明殉职操作数的方式,“位移量”字节给出某些寻址方式需要的对基地址的偏移量,“立即数”字节给出立即寻址方式需要的数值本身。如下图



代码指令一般占用1~6个字节,细分如下:



其详细的通用指令格式如图:



其中第一字节称为操作码字节。
2~7位为操作码(OPCODE),第1位称为D位,指出操作数传输的方向,D=0时,表示第2字节REG字段(第2字节3~5位)给出的寄存器为源操作数寄存器。D=1时,REG字段指出的寄存器为目标操作数。第一字节第0位为W位,指出操作数是字节还是字。W=0表示参加运算的数为字节,W=1表示参加运算的数为字。

8086指令的寻址方式字节编码:



二、寻址方式
1、立即数寻址方式——指令中的操作imm直接存放在极其代码中,紧跟在操作码之后。例:MOV AL,05H
2、寄存器寻址方式——操作数存放在CPU的内部寄存器reg中,可以是8位寄存器r8:AH/AL/BH/BL/CH/CL/DH/DL;也可以是16位寄存器r16:AX/BX/CX/DX/SI/DI/BP/SP,操作数还可以存放在4个段寄存器seg中:CS/DS/SS/ES。
例:MOV AX,1234H ;源操作数采用寄存器寻址,目的操作数为立即数寻址
MOV BX,AX ;两个操作数均为寄存器寻址
3、存储器寻址方式——寻址贮存中存储的操作数称为存储器寻址方式,也称为主存寻址方式。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。因为8086的存储器是分段管理的,这里给出的地址只是偏移地址(称为有效地址EA),段地址在默认的或是用段超越前缀指定的段寄存器中。主要有以下几种方式:
(1)直接寻址:指令中直接包含了有效地址。例:MOV AX,[2000H] ;AX←DS:[2000H],该指令中给定了有效地址2000H,默认的段寄存器是DS数据段。
(2)寄存器间接寻址方式:有效地址存放在基址寄存器BX或变址寄存器SI、DI中,默认的段地址在DS段寄存器中,可以使用段超越前缀改变。例:MOV AX,[SI] ;AX←DS:[SI]。该指令中有效地址存放于SI寄存器中。
(3)寄存器相对寻址方式:有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI。操作数的有效地址应该是:有效地址EA=BX/BP/SI/DI+8/16位位移量,其中BX、SI、DI寄存器默认是数据段DS,BP寄存器默认是堆栈段SS,可以段超越。例:MOV AX,[DI+06H] ;AX←DS:[DI+06H]
MOV AX,[BP+06H] ;AX←SS:[BP+06H]
(4)基址变址寻址方式:把一个基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成有效地址EA。有效地址EA=BX/BP+SI/DI ,若基址寄存器使用BX,其默认段为数据段DS;若基址寄存器使用BP,其默认段为堆栈段SS。例:MOV AX,[BX+SI] ;AX←DS:[BX+SI] MOV AX,[BP+DI] ;AX←SS:[BP+DI]
MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
(5)相对基址变址寻址方式:也使用基址寄存器(BX/BP)和变址寄存器(SI/DI),另外还在指令中制定一个8位或16位的位移量,这三者之和构成操作数的有效地址EA。
有效地址EA=BX/BP+SI/DI+8/16位位移量 ,与BX寄存器默认的是数据段DS,与BP寄存器默认的是堆栈段SS,例:MOV AX,[BX+SI+06H] ;AX←DS:[BX+SI+06H]

说明:
1、在寄存器相对寻址或相对基址变址寻址方式中,位移量可以使用符号表示:
MOV AX,[SI+COUNT] ;COUNT是事先定义的变量或常量,此处就是一个数值
MOV AX,[BX+SI+WNUM] ;WNUM也是常量或变量
2、同一寻址方式有时可以写成不同的方式:
MOV AX,[BX][SI] ;也可以写成:MOV AX,[BX+SI]
MOV AX,COUNT[SI] ;也可以写成:MOV AX,[SI+COUNT]
MOV AX,WNUM[BX][SI] ;也可以写成:MOV AX,[BX+SI+WNUM] 或 MOV AX,WNUM[BX+SI]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: