第3章8086的寻址方式和 指令系统 本章重点】掌握指令系统的的基本格式,指令系统 的操作功能及使用方法 【本章难点】8086的寻址方式,数据传送类指令 和算术运算类指令的使用
第3章 8086的寻址方式和 指令系统 【本章重点】掌握指令系统的的基本格式,指令系统 的操作功能及使用方法。 【本章难点】8086的寻址方式,数据传送类指令 和算术运算类指令的使用
83.18086的寻址方式 311操作数的寻址方式 1.立即数寻址 在这种寻址方式中,操作数直接跟在操作码的后面 参加指令所规定的操作,并且操作数与操作码一起 放在代码段中。这种方式叫立即数寻址方式。 例: MOV AX,1234H 这条指令的功能是:把立即数1234H送入AX中
§3.1 8086的寻址方式 3.1.1操作数的寻址方式 1.立即数寻址 在这种寻址方式中,操作数直接跟在操作码的后面, 参加指令所规定的操作,并且操作数与操作码一起 放在代码段中。这种方式叫立即数寻址方式。 例:MOV AX,1234H 这条指令的功能是:把立即数1234H送入AX中
AH AL 34代码段 12 图3-1立即寻址示意图 2.寄存器寻址 如果操作数就在CPU的内部寄存器中,那么寄存器 名在指令中给出。这种寻址方式就叫寄存器寻址方式
操作码 34 12 AH AL ROM 代码段 . . . . . . AX 12 34 图3-1 立即寻址示意图 2.寄存器寻址 如果操作数就在CPU的内部寄存器中,那么寄存器 名在指令中给出。这种寻址方式就叫寄存器寻址方式
例: MOV DS,AX 图3-2寄存器寻址示意图 对16位操作数来说,寄存器可以为AX、BX,CX, DX、SⅠ、DI、SP或者BP,对于8位操作数来说,寄存 器可为AH,AL、BH,BL,CH,CL、DH,DL。 采用寄存器寻址方式的指令在执行时,操作就在CPU 内部进行,不需要使用总线周期,因此,执行速度快
例:MOV DS,AX DS AX 图3-2 寄存器寻址示意图 对16位操作数来说,寄存器可以为AX、BX,CX, DX、SI、DI、SP或者BP,对于8位操作数来说,寄存 器可为AH,AL、BH,BL,CH,CL、DH,DL。 采用寄存器寻址方式的指令在执行时,操作就在CPU 内部进行,不需要使用总线周期,因此,执行速度快
3.直接寻址 使用直接寻址方式时,数据总是在存储器中,存储 单元的有效地址由指令直接指出,所以直接寻址是 对存储器进行访问时可采用的最简单的方式。 假如DS=3000H 例: MOV AX,DS:[2010H DS 300 操作码 代码段 20 32010 3201OH AX 86 数据段 32011H 6
3.直接寻址 使用直接寻址方式时,数据总是在存储器中,存储 单元的有效地址由指令直接指出,所以直接寻址是 对存储器进行访问时可采用的最简单的方式。 操作码 10 20 DS 3 0 0 0 2 0 1 0 3 2 0 1 0 代码段 AX 数据段 AH AL 80 86 86 80 32010H 32011H . . . . . . { 假如DS=3000H 例:MOV AX,DS:[2010H]
物理地址= DS×16+2010H=3000H×16+2010H32010H 指令功能是将32010H和32011H两单元的内容送到AX中。 要注意的是采用直接寻址方式时,如果指令前面没有用前 缀指明操作数在哪一段,则默认为段寄存器是数据段寄存 器DS。 4.寄存器间接寻址 采用寄存器间接寻址方式时,操作数一定在存储器中 存储单元的有效地址由寄存器指出,这些寄存器可以为BX BP,SI和DI之一,由于上述4个寄存器所默认的段寄存器 不同,这样又可以分两种情况:
物理地址= DS×16+2010H=3000H×16+2010H=32010H 指令功能是将32010H和32011H两单元的内容送到AX中。 要注意的是采用直接寻址方式时,如果指令前面没有用前 缀指明操作数在哪一段,则默认为段寄存器是数据段寄存 器DS。 4.寄存器间接寻址 采用寄存器间接寻址方式时,操作数一定在存储器中, 存储单元的有效地址由寄存器指出,这些寄存器可以为BX、 BP,SI和DI之一,由于上述4个寄存器所黙认的段寄存器 不同,这样又可以分两种情况:
①以SⅠ、DⅠ、BX进行间接寻址,则操作数通常存放在现 行数据段中。此时数据段寄存器内容加上SⅠ、DⅠ、BX中 的16位段内偏移地址,即得操作数的地址 例: MOV AX,[S ROM Ds3000 操作码 000 代码段 31000 3100OH 78 78 数据段 31001H 56 和直接寻址的情况—样,如果指令前面没有用前缀指明具体 的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器 为BP时,则对应的段寄存器为SS
① 以SI、DI、BX进行间接寻址,则操作数通常存放在现 行数据段中。此时数据段寄存器内容加上SI、DI、BX中 的16位段内偏移地址,即得操作数的地址 例:MOV AX,[SI] 操作码 DS 3 0 0 0 3 1 0 0 0 代码段 AX 数据段 AH AL 78 56 56 78 31000H 31001H . . . 1 0 0 0 ROM SI . . . . . . 和直接寻址的情况—样,如果指令前面没有用前缀指明具体 的段寄存器,则寻址时默认的段寄存器通常为DS。如寄存器 为BP时,则对应的段寄存器为SS
②寄存器BP间接寻址,则操作数存放在堆栈段区域中。 此时堆栈段寄存器内容加上BP中的16位段内偏移地址, 即得操作数的地址。假如SS=3000H 例: MOV AX,[BP] ROM SS 3000 代码段 +BPL2000 32000 数据段 AH AL 32000 34 AX1234 堆栈段 32001 12 物理地址=SS×16+BP=30000H+2000H=32000H 指令功能是将32000H和3200H两单元的内容送到AX中
②寄存器BP间接寻址,则操作数存放在堆栈段区域中。 此时堆栈段寄存器内容加上BP中的16位段内偏移地址, 即得操作数的地址。假如SS=3000H 例:MOV AX,[BP] SS 3 0 0 0 2 0 0 0 3 2 0 0 0 代码段 AX 堆栈段 AH AL 34 12 12 34 32000 32001 . . . . . . BP . . . ROM . . . 数据段 物理地址=SS×16+BP=30000H+2000H=32000H 指令功能是将32000H和32001H两单元的内容送到AX中
5.寄存器相对寻址 在这种寻址方式中,操作数存放在存贮器中。操作数的地址 是由段寄存器内容加上SⅠ、DI、BX、BP之一的内容,再加 上由指令所指出的8位或16位相对地址偏移量而得到的 例: MOV AX,DISP[S门 ROM DS3000 「操作码 SI1000 代码段 +Dso800+(-03 31300 AH 3130OH 78 56 78 数据段 31301H 56 物理地址=DS×16+SI+DISP=3000H+1000H+0300H=31300H指 令功能是将31300H和31301H两单元的内容送到AX中
5.寄存器相对寻址 在这种寻址方式中,操作数存放在存贮器中。操作数的地址 是由段寄存器内容加上SI、DI、BX、BP之一的内容,再加 上由指令所指出的8位或16位相对地址偏移量而得到的 例:MOV AX,DISP[SI] 操作码 DS 3 0 0 0 3 1 3 0 0 代码段 AX 数据段 AH AL 78 56 56 78 31300H 31301H . . . . . . 1 0 0 0 ROM SI DISP 0 3 0 0 00 { 03 物理地址=DS×16+SI+DISP=30000H+1000H+0300H=31300H指 令功能是将31300H和31301H两单元的内容送到AX中
6.基址、变址寻址 在8086中,通常把BX和BP作为基址寄存器,而把SIDI 作为变址寄存器。将这两种寄存器联合起来进行的寻址 就称为基址、变址寻址。这时,操作数的地址应该是段 寄存器内容×16加上基址寄存器内容(BX或BP内容) 再加上变址寄存器内容(SI或D内容)而得到的 例:MOAX,[ BXISI ROM DsL30001 SI1000 操作码 代码段 BX3000 34000 78 AX 数据段 34001H 56
6.基址、变址寻址 在8086中,通常把BX和BP作为基址寄存器,而把SI、DI 作为变址寄存器。将这两种寄存器联合起来进行的寻址 就称为基址、变址寻址。这时,操作数的地址应该是段 寄存器内容×16加上基址寄存器内容(BX或BP内容), 再加上变址寄存器内容(SI或DI内容)而得到的. 例:MOV AX,[BX][SI] 操作码 DS 3 0 0 0 3 0 0 0 3 4 0 0 0 代码段 AX 数据段 AH AL 78 56 56 78 34000H 34001H . . . . . . 1 0 0 0 ROM SI BX