第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中
ROM 操作码 34代码段 图3-1立即寻址示意图 2.寄存器寻址 如果操作数就在CPU的内部寄存器中,那么寄存器 名在指令中给出。这种寻址方式就叫寄存器寻址方式
操作码 34 12 AH AL ROM 代码段 . . . . . . AX 12 34 图3-1 立即寻址示意图 2.寄存器寻址 如果操作数就在CPU的内部寄存器中,那么寄存器 名在指令中给出。这种寻址方式就叫寄存器寻址方式
例: MOV DS,AX 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 「操作码 代码段 2010 20 32010 AH 32010H 80 AX 86 80 数据段 32011H 86
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+2010H=32010H 指令功能是将32010H和32011H两单元的内容送到AX中。 要注意的是采用直接寻址方式时,如果指令前面没有用前 缀指明操作数在哪一段,则默认为段寄存器是数据段寄存 器DS。 4.寄存器间接寻址 采用寄存器间接寻址方式时,操作数一定在存储器中 存储单元的有效地址由寄存器指出,这些寄存器可以为BX BP,SⅠ和D之一,由于上述4个寄存器所默认的段寄存器 不同,这样又可以分两种情况:
物理地址= DS×16+2010H=3000H×16+2010H=32010H 指令功能是将32010H和32011H两单元的内容送到AX中。 要注意的是采用直接寻址方式时,如果指令前面没有用前 缀指明操作数在哪一段,则默认为段寄存器是数据段寄存 器DS。 4.寄存器间接寻址 采用寄存器间接寻址方式时,操作数一定在存储器中, 存储单元的有效地址由寄存器指出,这些寄存器可以为BX、 BP,SI和DI之一,由于上述4个寄存器所黙认的段寄存器 不同,这样又可以分两种情况:
①以SI、D、BX进行间接寻址,则操作数通常存放在现 行数据段中。此时数据段寄存器内容加上SⅠ、DⅠ、BX中 的16位段内偏移地址,即得操作数的地址 例: MOV AX,[S ROM DS300 操作码 SI1000 代码段 31000 AH AL 31000H 78 AX5678 数据段 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 SS3000 代码段 BP2000 数据段 32000 AX12|34 堆栈段 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Ⅰ、DⅠ、BX、BP之一的内容,再加 上由指令所指出的8位或16位相对地址偏移量而得到的 例: MOV AX,DISP[S ROM Ds「3000 操作码 SI|1000 00 代码段 DISP 0 30 0 31300 31300H 78 56|78 数据段 31301H 56 物理地址=DS×16+SI+DISP=30000+1000H+0300H=31300H指 令功能是将31300H和3130H两单元的内容送到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作为基址寄存器,而把SⅠ、DI 作为变址寄存器。将这两种寄存器联合起来进行的寻址 就称为基址、变址寻址。这时,操作数的地址应该是段 寄存器内容×16加上基址寄存器内容(BX或BP内容), 再加上变址寄存器内容(SI或D内容)而得到的 例: MOV AX,BX]IS DS3000 SI1000 操作码 代码段 BX|3000 3400 34000H 78 AX5678 数据段 34001H
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