1.立即寻址、操作数包含在指令中,这种操作数称为立即数可以是8位数值(00H~FFH)■也可以是16位数值(0000H~FFFFH)>MOVAL,80H;将80H送入ALMOVAX,306AH;将306AH送入AX立即数寻址方式常用来给寄存器和存储单元赋值操作数直接在指令中取得,不需要使用另外的总线周期,执行时间短、速度快
1.立即寻址 ➢ 操作数包含在指令中,这种操作数称为立即数 ◼ 可以是8位数值(00H~FFH) ◼ 也可以是16位数值(0000H~FFFFH) ➢ MOV AL,80H;将80H送入AL MOV AX,306AH;将306AH送入AX ➢ 立即数寻址方式常用来给寄存器和存储单元赋值。 ➢ 操作数直接在指令中取得,不需要使用另外的总线 周期,执行时间短、速度快
2.寄存器寻址操作数在CPU的内部寄存器中:18位寄存器:AH、AL、BH、BL、CH、CL、DH、DL■16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP14个段寄存器:CS、DS、SS、ESMOVAL,BL;将BL的内容传送到AL中MOVBX,AX;将AX的内容传送到BX中采用寄存器寻址的指令在执行时,操作数就在CPU中,不需要访问存储器来取得操作数,执行速度快。另外寄存器名比内存地址短,指令所占内存空间少
2.寄存器寻址 ➢ 操作数在CPU的内部寄存器中: ◼ 8位寄存器: AH、AL、BH、BL、CH、CL、DH、DL ◼ 16位寄存器: AX、BX、CX、DX、SI、DI、BP、SP ◼ 4个段寄存器: CS、DS、SS、ES ➢ MOV AL,BL;将BL的内容传送到AL中 MOV BX,AX;将AX的内容传送到BX中 ➢ 采用寄存器寻址的指令在执行时,操作数就在CPU中,不需 要访问存储器来取得操作数,执行速度快。另外寄存器名比 内存地址短,指令所占内存空间少
3.直接寻址有效地址EA(EffectiveAddress):操作数的偏移地址EA可通过不同的寻址方式来得到。直接寻址方式的有效地址在指令中直接给出默认的段基址在DS段寄存器,可使用段前缀改变例子用方括号包含有效地址,如:MOVAX,[1000H]。如果有效地址是以符号地址形式提供,则可不加方括号。MOVAX,BUFA;BUFA为符号地址,这时不加跨段前缀,默认仍为DS数据段。如BUFA变量在附加段中,就必须书写为:MOVAXES:BUFA注意:有些宏汇编程序规定,直接寻址的16位常量有效地址必须加段前缀,否则会当作立即数
3.直接寻址 ➢有效地址EA (EffectiveAddress):操作数的偏移地址。 ➢EA可通过不同的寻址方式来得到。 ➢直接寻址方式的有效地址在指令中直接给出。 ➢默认的段基址在DS段寄存器,可使用段前缀改变。 ➢用方括号包含有效地址,如:MOV AX,[1000H]。 ➢如果有效地址是以符号地址形式提供,则可不加方括号。 MOV AX,BUFA;BUFA为符号地址,这时不加跨段前 缀,默认仍为DS数据段。如BUFA变量 在附加段中,就必须书写为: MOV AX,ES:BUFA 注意:有些宏汇编程序规定,直接寻址的16位常量有效地址 必须加段前缀,否则会当作立即数。 例子
例子已知:(DS)=2000H,(21000H)=12H,(21001H)=34H。试给出指令MOVAX,「1000H执行后AX的内容。数据段20000H段基址:2000H有效地址:1000H....21000H物理地址:21000H12HAX34H21001H...-.2FFFFH指令执行后,(AX)=3412H。存储器
例子 段基址:2000H 有效地址:1000H 物理地址:21000H AX 已知: (DS)=2000H ,(21000H)=12H, (21001H)=34H。 试给出指令 MOV AX,[1000H]执行后AX的内容。 20000H 数据段 2FFFFH 21000H 21001H 12H 34H 存储器 指令执行后,(AX)=3412H
4.寄存器间接寻址有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中如用BX、SI或DI作为间址寄存器,则默认的段基址在DS段寄存器如用BP作为间址寄存器,则默认的段基址在SS段寄存器可使用段前缀改变。MOVAX,[BXI;若(DS)=2000H,(BX)=1000H,则将数据段21000H、21001H两个单元的内容送到AX中MOVCX,[BPl;若(SS)=4000H,(BP)=1000H,则将堆栈段41000H、41001H两个单元的内容送到CX中。MOVAX,ES:[SI;若(ES)=3000H,(SI)=1000H,则将附加段31000H、31001H两个单元的内容送到AX中
4.寄存器间接寻址 ➢ 有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中。 ➢ 如用BX、SI或DI作为间址寄存器,则默认的段基址在DS段寄存器。 ➢ 如用BP作为间址寄存器,则默认的段基址在SS段寄存器。 ➢ 可使用段前缀改变。 ➢ MOV AX,[BX] ;若(DS)=2000H,(BX)=1000H,则将数据段 21000H、21001H两个单元的内容送到AX中。 ➢ MOV CX,[BP] ;若 (SS)=4000H,(BP)=1000H,则将堆栈段 41000H、41001H两个单元的内容送到CX中。 ➢ MOV AX,ES:[SI] ;若(ES)=3000H,(SI)=1000H,则将附加段 31000H、31001H两个单元的内容送到AX中