8086/8088 七种寻址方式 (一)8086/8088 寄存器组 (二)8086/8088 寻址方式 (1)立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。 这种操作数称为立即数,立即数可以是8 位的也可以是16 位的,如果立即数是16 位的按“高高低低”的原则。 例如指令: MOV AX,1234H 的存储和执行情况如下图: 图中指令存放在代码段中,OP 表示该指令的操作码部分 再例如:MOV AL,5 则指令执行行,(AL)=05H MOV BX,3064H 则指令执行后,(BX)=3064H (2)寄存器寻址方式 操作数在CPU 内部的寄存器中,指令指定寄存器号。 对于 16 位操作数,寄存器可以是: AX,BX,CX,DX,SI,DI,SP,和 BP 等: 对于 8 位数,寄存器可以是: AL,AH,BL,BH,CL,CH,DL,DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。 例如:MOV AX,BX 如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变 例如:MOV SI,AX MOV AL,DH (3)直接寻址方式 操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。操作数一般存放在数据段 所以操作数的地址由 DS 加上指令中直接给出的16 位偏移得到。 如果采用段超越前缀,则操作数也可含在数据段外的其他段中。 如下图所示: 在汇编语言指令中,可以用符叼地址代替数值地址。 如:MOV AX,VALUE 此时 VALUE 为存放操作数单元的符号地址。 如写成:MOV AX,[VALUE] 也是可以的,两者是相等的。 如 VALUE 在附加段中,则应指定段超越前缀如下: MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE] 直接寻址方式常用于处理单个存储器变量的情况。它可实现在64K 字节的段内寻找操作数。直接寻址的操作数通常是程序使用的变量。 注意立即寻址和直接寻址书写方法上的不同,直接寻址的地址要放在方括号中。在源程序中,往往用变量名表示。 (4)寄存器间接寻址方式 操作数在存储器中,操作数有效地址在SI,DI,BX,BP 这四个寄存器之一中,在一般情况下,如果有效地址在SI,DI 和 BX 中,则以DS 段寄存器之内容为段值。如果有效地址在BP 中,则以SS 段寄存器之内容为段值。 如下图所示: 指令中也可指定段超越前缀来取得其他段中的数据如: MOV AX,ES:[BX];引用的段寄存器是 ES MOV [SI],AX;目的操作数寄存器间...