第三章寻址方式与指令系统 指令系统:一组指令集 指令:「操作码操作数「操作数 地址指令: INC AX DEC CX 二地址指令: MOV AX,[200 ADD AH。BL 寻址方式:取得操作数地址的方式或指令中 用于说明操作数所在地址的表示方法
1 第三章寻址方式与指令系统 指令系统:一组指令集 指令: 操作码 操作数 ... 操作数 一地址指令: INC AX DEC CX 二地址指令: MOV AX, [2000H] ADD AH, BL 寻址方式:取得操作数地址的方式或指令中 用于说明操作数所在地址的表示方法
31寻址方式 立即寻址方式 格式:n;n为一常数(立即数) 特点:n本身是需要寻找的操作对象。 它紧跟指令存于内存代码段中。 例: MOV BX,10 MOV AH,‘A MOVAⅩ,3064H
2 一. 立即寻址方式 格式:n ;n为一常数(立即数) 特点:n 本身是需要寻找的操作对象。 它紧跟指令存于内存代码段中。 例: MOV BX ,10 MOV AH , ‘A’ MOV AX , 3064H 3.1 寻址方式
内存 低 CPU M∨代码段 AX 64H 30H 高 AH AL ·立即数只能作双操作数指令的源操作数.不能作目的 操作数。 立即数不能作单操作数指令的操作数。 如:MOV100H.AX INC 50 立即数送入目的操作数中。注意溢出 如: MOV AL,-90H
3 内存: : MOV 64H 30H : 低 高 代码段 CPU : AX AH AL 注:• 立即数只能作双操作数指令的源操作数,不能作目的 操作数。 • 立即数不能作单操作数指令的操作数。 如: MOV 100H , AX × INC 50 × • 立即数送入目的操作数中,注意溢出 如:MOV AL , - 90H ×
二,直接寻址方式 格式 段寄存器:[EA](其中:段寄存器为DS,ES,SS之一) 或含有变量的地址表达式。 特点 ·操作数的地址偏移量EA.或变量地址表达式的EA直接 包含在指令中,与操作码一起放在代码段中。 操作数对象一般不作特别说明,存放在当前数据段中 其物理地址求法为:(DS)←0000+EA 4 MOV AX, DS: [2000H (①DS)+2000eAX 设执行前(DS)=3000H 4 (32000H)=2415H 则执行后(320001字AX即(AX)=2415H 若 MOV AL,DS:[2000H 则(32000H字节口AL 即(AL)=15H
4 二. 直接寻址方式 • 格式: 段寄存器:[EA](其中:段寄存器为 DS,ES,SS之一) 或含有变量的地址表达式。 • 特点: • 操作数的地址偏移量EA,或变量地址表达式的EA直接 包含在指令中,与操作码一起放在代码段中。 • 操作数对象一般不作特别说明,存放在当前数据段中, 其物理地址求法为:(DS) 0000 + EA 4 例:MOV AX,DS:[2000H ] ;((DS)+2000H) AX 设执行前(DS) = 3000H 4 (32000H)=2415H 则执行后(32000H)字 AX 即(AX)=2415H 若 MOV AL,DS :[2000H] 则 (32000H)字节 AL 即(AL)=15H
DS 代LMOV 300040000 OOH 段 20H 这说明: °段寄存器:A这种直接寻址 方式没有类型 数 ·含有变量地址表达式的形式 据 5H3200OH 段24H32001H 有类型。其类型由变量类型 决定 内存 例: MOV AX,ES:[2000H (ES)+2000H)DAX 段跨越符 4 MOV SS: [1000H], BX ;(BX)C>(SS)+1000H 4 MOV BUF AX MOV [BUFI, AX
5 : MOV 0000 00H 4 20H + : : 15H 32000H 24H 32001H : 代 码 段 数 据 段 3000H 内存 这说明: •段寄存器:[EA]这种直接寻址 方式没有类型; •含有变量地址表达式的形式 有类型,其类型由变量类型 决定。 例:MOV AX , ES:[2000H] ; ((ES)+2000H) AX 段跨越符 4 MOV SS : [1000H] , BX ; (BX) (SS)+1000H 4 MOV BUF, AX MOV [BUF] , AX DS
、寄存器寻址方式 寄存器寻址方式一操作数在指定的寄存器中 MOV AX BX MOV AL BH *字节寄存器只有 AH AL BH BL CH CL DH DL SRC和DST的字长一致× MOV AH,BX CS不能用MOV指令改变× MOV CS,AX
6 寄存器寻址方式*— 操作数在指定的寄存器中 MOV AX, BX MOV AL, BH * 字节寄存器只有 AH AL BH BL CH CL DH DL * SRC 和 DST的字长一致 MOV AH, BX * CS不能用MOV指令改变 MOV CS, AX 三、 寄存器寻址方式
四、岢存器间接寻方式 格式:[R];其中R为BX,BP,SI,DI之一,不允许是其它寄存器。 特点:操作对象在內存中,操作对象的EA在BX,BP,SI,DI之 中。(不在内存) 即:EA=(BX) (BP) (SI) (DI 注:(1)若选择[BⅪ,SⅠ,[DI之一,且缺省段跨越捋,则对象 在当前的数据段中
7 格式:[R];其中R为BX,BP,SI,DI之一,不允许是其它寄存器。 特点:操作对象在内存中,操作对象的EA在BX,BP,SI,DI之 一中。(不在内存) 即:EA= (BX) (BP) (SI) (DI) 注:(1)若选择[BX],[SI],[DI]之一,且缺省段跨越符,则对象 在当前的数据段中; 四、寄存器间接寻址方式
例: MOV AX,[BX ((DS)+(BX)) AX 4 若执行前(DS)=2000H,(BX)=1000H MOV AX, [BXI DS BX 2000H 1000H 4 数据 OOH 21000H 50H 21001H 段 AX 内存 50H OAOH (2)若缺省段跨越捋,且BP作间址寄存器,则对象存放在 当前堆栈段中。 如: MOV BX,[BP] ((SS)+(BP))EBX 4
8 例:MOV AX,[BX] ;((DS)+(BX)) AX 4 若执行前 (DS)=2000H,(BX)=1000H : MOV AX , [BX] DS BX : : 4 0A0H 21000H + 50H 21001H : 数 据 段 2000H 1000H 内存 50H 0A0H AX (2)若缺省段跨越符, 且BP作间址寄存器,则对象存放在 当前堆栈段中。 如:MOV BX,[BP] ;((SS)+(BP)) BX 4
(3)若指定段跨越符,则不管BP,BX,SI,DⅠ之一作 变址器,都取相应段中数据。 如: MOV ES:[BP],AX ;(AX)=→(ES)+(BP) MOV AX, ES: [BX;((ES)+(BX))AX 4 注:·间址器一定要是BP,BX,SI,DI之 如: MOV CX,[AX] ·间接寻址方式表示对象的地址。并不能表示对 象的类型
9 (3)若指定段跨越符,则不管BP,BX,SI,DI之一作 变址器,都取相应段中数据。 如:MOV ES:[BP],AX ;(AX) (ES)+(BP) MOV AX,ES:[BX] ;((ES)+(BX)) AX 4 注:• 间址器一定要是BP,BX,SI,DI之一 如:MOV CX,[AX] × • 间接寻址方式表示对象的地址,并不能表示对 象的类型
五,相对寻址方式 格式:X[R];其中R为BX,BP,SI,DI之一。 Ⅹ为一整常数或变量地址表达式。 特点:·操作对象在内存中 EA为R的内容和X之和(即:Ⅹ在代码段中,EA另一部 分在R中)。 EA=(X+(SI) X+(DI) X+(BX X+(BP) (DS)+((SI)+X 4(DI)+X 缺省段跨越符的物理地址 (BX)+X (SS)+(BP)+X 4
10 格式:X[R] ;其中R为BX,BP,SI,DI之一。 X为一整常数或变量地址表达式。 特点:• 操作对象在内存中 • EA为R的内容和X之和(即:X在代码段中,EA另一部 分在R中)。 EA= X+(SI) X+(DI) X+(BX) X+(BP) 缺省段跨越符的物理地址 (DS)+ (SI)+X 4 (DI)+X (BX)+X (SS)+(BP)+X 4 五. 相对寻址方式