目录
操作数的寻址方式
操作数的寻址方式是寻找操作数或操作数地址的方式,分为三种分别是立即数寻址方式、寄存器寻址方式、存储器寻址方式。
立即数寻址方式
立即数寻址方式的特点是操作数作为指令的一部分存放在操作码之后的主存单元中且立即数可以是8位(0~255、00H~FFH)数值、16位(0000H~FFFFH、0~65535)数值、字符常量;它们的位置只能在src即源操作数的位置。
寄存器寻址方式
寄存器寻址方式的操作数存放在CPU的内部寄存器(CS代码段、DS数据段、ES附加段、SS堆栈段)中,可以是8位寄存器、16位寄存器;其中16位寄存器不可以用IP、CS不能在目的操作数dst的位置,只能在源操作数src的位置,寄存器的名字就是表示其内容(操作数)。
存储器寻址方式
存储器寻址方式的操作数在主存储器中,用主存EA有效地址表示,8086CPU分别设计了5种存储器寻址方式(直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址变址寻址方式、相对基址变址寻址方式)
段超越前缀指令
段超越前缀是用来改变默认的段地址,没有指明时,一般的数据访问在DS数据段中,使用BP访问主存,则在SS堆栈段,改变默认的段地址格式,则需要使用段超越前缀指令。
直接寻址方式
有效地址EA在指令中直接给出,中括号是表示有效地址EA,默认的段地址是数据段DS,可用段超越前缀改变。
寄存器间接寻址方式
有效地址EA存放在BX、SI、DI或BP中,EA为BX、SI、DI时,默认是DS,BP默认是SS,可以使用段超越前缀改变。
寄存器相对寻址方式
EA=BX/BP/SI/DI+8/16位的位移量,BX、SI、DI默认是DS,BP默认是SS,可使用超越前缀改变。
基址变址寻址方式
EA=BX\BP+SI\DI,BX、SI、DI默认是DS,BP默认是SS;可使用段超越前缀改变。
相对基址变址寻址方式
EA=BX、BP+SI、DI+8、16位位移量,BX、SI、DI默认是在DS,BP默认是在SS;可使用超越前缀改变。
存储器寻址方式中的变量
其它
(1):有效地址EA是在执行单元EU中运算而物理地址PA是在BIU的20位物理地址加法器中运算
(2):三种寻址方式,寄存器寻址方式是最快的是因为是直接在CPU内部,不需要总线周期。其次是立即数寻址方式,他的操作数是一直存储在CS代码段中需要启用总线周期。最后是存储器寻址方式,因为它的操作数不仅存储在代码段中,还会存储在其它段中(ES、SS、DS)
数据传送类指令(MOV)
传送指令把数据从一个位置传送到另一个位置,除标志寄存器传送指令外(CF、OF、SF、AF、ZF、PF、TF、IF、DF),均不影响标志位,传送类指令有MOV、XCHG、PUSH、POP、LEA。
MOV指令——立即数传送
MOV指令——寄存器传送
MOV指令——存储器传送
MOV指令——段寄存器传送
MOV的非法指令
(1)两个操作数类型不一致。在绝大多数的双操作数指令中,目的操作数和源操作数必须是一样的数据类型,要么一块是字,要么一块是字节;否则为非法指令。
(2)无法确定是字节还是字操作。 当无法通过一个操作数确定其类型时,需要利用汇编语言的操作符显式指明。
(3)两个操作数都是存储器。 不允许两个操作数都是存储单元(存储器操作数)
(4)段寄存器的操作有限制。能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活。