资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 操作数的寻址方式,1,第一节 汇编指令格式,汇编指令的格式:,指令助记符操作数,,操作数,;注释,根据操作数的个数分,有以下三种格式,:,1,、双操作数指令,指令助记符 目的操作数(,dst,),源操作数(,src,),运算之后,结果保存在目的操作数。,例:,mov ax,1234h,mov bx,5678h,add ax,,,bx,2,第一节 汇编指令格式,2,、单操作数指令,指令助记符 操作数,只有把数据先送入隐含的寄存器中、才能执行此操作的指令。,例:,mul cx ;(ax)(cx)(dx,,,ax),3,、无操作数指令,指令助记符,例:,clc ;0cf stc ;1cf,3,第二节 操作数的寻址方式,一、概述,二、立即数寻址(,imm,),三、寄存器寻址(,reg,),四、存储器寻址(,mem,),4,概述,寻址方式:,在指令中,指定操作数或操作数的存放位置的方法称为寻址方式。,操作数出现在指令中,立即数寻址,操作数保存在寄存器中,寄存器寻址,操作数保存在内存,存储器寻址,操作数保存在,i/o,端口,i/o,寻址(见第八章),5,第二节 操作数的寻址方式,一、概述,二、立即数寻址(,imm,),三、寄存器寻址(,reg,),四、存储器寻址(,mem,),6,立即数寻址(,imm,),操作数出现在指令中,是指令的一个组成部分。这样的操作数叫做立即数,.,以这种指定操作数的方式就叫做,立即数寻址,。,例:,mov ah,80h add ax,1234h,mov b1,12h mov w1,3456h add d1,32123456h,其中:,b1,、,w1,和,d1,分别是字节、字和双字内存变量。,执行过程,7,立即数寻址(,imm,),要点:,目的操作数不能使用立即数寻址。,例:,mov 1234h,ax,立即数可以是,8,、,16,位数。在双操作数指令,两个操作数的位数、数据类型必须相同。,例:,mov al,1234h,mov al,bx mov bx,al,mov ax,,,70h mov ax,,,-70h,8,第二节 操作数的寻址方式,一、概述,二、立即数寻址(,imm,),三、寄存器寻址(,reg,),四、存储器寻址(,mem,),9,寄存器寻址(,reg,),指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(寄存器符号,),的寻址方式称为,寄存器寻址方式,。,指令中可以引用的寄存器及其符号如下:,8,位寄存器有:,ah,、,al,、,bh,、,bl,、,ch,、,cl,、,dh,和,dl,。,16,位寄存器有:,ax,、,bx,、,cx,、,dx,、,si,、,di,、,sp,、,bp,、,ip,和段寄存器。,执行过程,10,寄存器寻址(,reg,),例:,add varw,ax add varb,bh,;其中,varw,,,varb,是字、字节内存变量。,add bh,78h add ax,1234h,mov ax,bx mov bh,al,要点:在双操作数指令,源操作数和目的操作数都可以使用寄存器寻址。,11,第二节 操作数的寻址方式,一、概述,二、立即数寻址(,imm,),三、寄存器寻址(,reg,),四、存储器寻址(,mem,),12,存储器寻址(,mem,),指令所要的操作数存放在内存中,在指令中给出存储器的地址来指定操作数的方法称为,存储器寻址方式。,段地址,默认的段寄存器,ds,或,ss,。如果使用段超越前缀,那么,段地址可存放在其它段寄存器。,EA,形成方式:分为,5,种,物理地址段地址,16+,有效地址(,EA,),13,1,、直接寻址,指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为,直接寻址方式。,物理地址,=(,段寄存器,)16+,有效地址,其中段地址在默认的,ds,,如果使用段超越前缀,那么,段地址可在其它段寄存器。,执行过程,14,1,、直接寻址,例:假设有指令:,mov ax,2000h,,在执行时,,(ds)=3000h,,内存单元,32000h,的值为,1234h,。问该指令执行后,,ax,的值是什么?指令变为:,mov al,2000h,al,的值是什么?,PA=,(,ds,),16+2000h=32000h,(,ax,),=1234h,(,al,),=34h,图示,15,1,、直接寻址,例:指令:,mov bx,es,:,1234h,,,(es)=1000h,,(,11234h,),=1234h,。问该指令执行后,,bx,的值是什么?,PA=,(,es,),16+1234h=11234h,(,bx,),=1234h,16,1,、直接寻址,地址也常用内存变量名来表示,书写格式:,v_1,或,v_1,。,如,mov ax,varw,mov ax,varw,与立即数寻址的区别,在指令中,直接寻址给出操作数的,EA,,立即数寻址给出操作数。,用数字书写时,格式不一样。,mov ax,1234hmov ax,1234,要点,:,17,2,、寄存器间接寻址,操作数在存储器中,操作数的有效地址用,si,、,di,、,bx,和,bp,等四个寄存器之一来指定,称这种寻址方式为,寄存器间接寻址方式。,18,2,、寄存器间接寻址,在不使用段超越前缀的情况下,有下列规定:,若有效地址用,si,、,di,和,bx,等之一来指定,则其缺省的段寄存器为,ds,;,若有效地址用,bp,来指定,则其缺省的段寄存器为,ss(,即:堆栈段,),。,例:,mov ax,bx,;,(,ax,)(,(ds)16+(bx,),mov ax,bp,;,(,ax,)(,(ss)16+(bp),),mov ax,es,:,bp,;,(,ax,)(,(es)16+(bp),),19,2,、寄存器间接寻址,例:假设有指令:,mov ax,bx,,在执行时,,(ds)=3000h,,,(bx)=2000h,,存储单元,32000h,的内容是,1234h,。问执行指令后,,ax,的值是什么?,图示,PA=(ds)*16+(bx)=3000h*16+2000h=32000h,(,bx,),=1234h,20,3,、寄存器相对寻址,操作数在存储器中,其有效地址是一个基址寄存器,(bx,、,bp),或变址寄存器,(si,、,di),的内容和指令中的,8,位,/16,位偏移量之和。,在不使用段超越前缀的情况下,有下列规定:,若有效地址用,si,、,di,和,bx,等之一来指定,则其缺省的段寄存器为,ds,;,若有效地址用,bp,来指定,则其缺省的段寄存器为,ss(,即:堆栈段,),。,21,3,、寄存器相对寻址,例:,mov al,bx+1000h,;,(al)(ds)16+(bx)+(1000h),mov ax,es,:,bp+06h,;,(ax)(es)16+(bp)+(06h),22,3,、寄存器相对寻址,例:假设指令:,mov ax,bx+1000h,,在执行它时,,(ds)=3000h,,,(bx)=1000h,,内存单元,32000h,的内容为,1234h,,问该指令执行后,,bx,的值是什么?,图示,EA=(bx)+1000h=1000h+1000h=2000h,PA=(ds)*16+EA=3000h*16+2000h=32000h,。,(ax)=1234h,23,4,、基址变址寻址,操作数在存储器中,其有效地址是一个基址寄存器,(bx,、,bp),和一个变址寄存器,(si,、,di),的内容之和。,在不使用段超越前缀的情况下,有下列规定:,若有效地址用,si,、,di,和,bx,等之一来指定,则其缺省的段寄存器为,ds,;,若有效地址用,bp,来指定,则其缺省的段寄存器为,ss(,即:堆栈段,),。,24,4,、基址变址寻址,例:,mov ax,bx+si,;,(ax)(ds16+(bx)+(si),mov ax,bp+di,;,(ax)(ss)16+(bp)+(di),mov ax,ds:bp+di,;,(ax)(ds)16+(bp)+(di),25,4,、基址变址寻址,例:,mov ax,bx+si,,在执行时,,(ds)=3000h,,,(bx)=1500h,,,(si)=500h,,内存单元,32000,的内容为,1234h,。问指令执行后,,ax,的值是什么?,EA=(bx)+(si)=1500h+500h=2000h,PA=(ds)*16+EA=3000h*16+2000h=32000h,(ax)=1234h,图示,26,5,、基址变址相对寻址,操作数在存储器中,其有效地址是一个基址寄存器,(bx,、,bp),的值、一个变址寄存器,(si,、,di),的值和指令中的,8,位,/16,位偏移量之和。,在不使用段超越前缀的情况下,有下列规定:,若有效地址用,si,、,di,和,bx,等之一来指定,则其缺省的段寄存器为,ds,;,若有效地址用,bp,来指定,则其缺省的段寄存器为,ss(,即:堆栈段,),。,27,5,、基址变址相对寻址,例:,mov ax,bx+si+06h,;,(ax)(ds)16+(bx)+(si)+06h),mov ax,bp+si+06h,;,(ax)(ss)16+(bx)+(si)+06h),图示,28,5,、基址变址相对寻址,例,:,假设指令:,mov ax,bx+si+1000h,,在执行时,,(ds)=3000h,,,(bx)=700h,,,(si)=300h,,内存单元,32000h,的内容为,1234h,。问指令执行后,,ax,的值是什么?,EA=(bx)+(si)+1000h=700h+300h+1000h=2000h,PA=(ds)*16+EA=1000h*16+2000h=32000h,(ax)=1234h,图示,29,5,、基址变址相对寻址,注意:,相对基址加变址寻址方式有多种等价的书写方式,书写格式:,bx+si+1000h,1000hbx+si,1000hbxsi,1000hsibx,但格式:,bx1000h+si,、,si1000h+bx,等是错误的,即所用寄存器不能在”,”,之外,该限制对寄存器相对寻址方式的书写也同样起作用。,30,总结,一、立即数寻址,二、寄存器寻址,三、存储器寻址,不涉及寄存器:,直接寻址,涉及一个寄存器:,寄存器间接寻址和寄存器相对寻址,涉及两个寄存器:,基址变址寻址和基址变址相对寻址,31,综合,例,1,指出下列操作数的寻址方式。,(,1,),bx,(,2,),si,(,3,),bp+si+100,(,4,),23,(,5,),23di,(,6,),100,(,7,),es,:,bx,(,8,),bxsi,(,9,),x,;,x,是变量名,(,10,),numbx,;,num,是数组名,32,综合,例,2,判断下列操作数的寻址方式是否正确,若错误说明错误原因。,(,1,),cx,(,2,),bx+bp,(,3,),ah,(,4,),bl+44h,(,5,),dx+100,(,6,),si100,(,7,),si+di+100,33,综合,例,3,、已知,(DS)=2000H,,,(BX)=100H,,,(SI)=2,,存储单元,21200H21203H,依次存放(十六进制),2A,、,4C,、,B7,、,65,,说明下列每条指令执行完后,AX,寄存器的内容。,(,1,),mov ax,1200h,(,2,),mov ax,bx+1101h,(,3,),mov ax,bxsi+1100h,34,综合,例,4,:如图所示,取第三个字数据(,dx,),解:取第,3,个数据,其偏移量:,num+3,(1),直接寻址:,mov dx,num+4,;num,为字变量,(2),寄存器间接寻址:,lea bx,num+4,mov dx,bx,35,综合,(3),寄存器相对寻址:,mov si,4,mov dx,numsi,(4),基址变址寻址:,lea bx,num,mov si,4,mov dx,bxsi,36,P33,1,、,2,、,3,、,5,、,6,(单数)、,作业,37,立即数寻址的功能,38,寄存器寻址的功能,39,直接寻址的功能,40,寄存器间接寻址的功能,41,寄存器相对寻址的功能,42,基址变址寻址的功能,43,相对基址变址寻址的功能,44,立即数寻址的执行,45,寄存器寻址的执行,46,直接寻址的执行,47,
展开阅读全文