8086寻址方式——微型计算机原理1.看见该人回到自己的家里。立即得到2.向该人询问。直接获得3.问其他知情者。间接获得一、寻址方式的定义如何得到某人的住址?结论:客观上存在几种可能的渠道获得某人的住址,然后找到该人。推理:计算机的指令也可以通过几种方式得到操作数的存放地址,然后取到操作数。寻址方式:寻找操作数存放地址的方式,即在指令中所指出的计算操作数地址的方法。操作数的位置操作数名称寻址方式名称在指令中立即数立即寻址(immediateaddressing)在寄存器中寄存器操作数寄存器寻址(registeraddressing)在存储器中存储器操作数存储器寻址(memoryaddressing)二、寻址方式分类1、立即数寻址控制器CPUAL操作码07H代码段CS低地址操作数(立即数)高地址...07H指令:MOVAL,07H指令:MOVAX,1A2BH控制器CPUAL操作码2BH代码段CS低地址操作数(立即数)高地址...2BH1AH1AHAH指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式叫立即数寻址。注意事项:(1)立即数只能做源操作数。(2)源、目的操作数的字长必须一致。(3)立即数为16位时,低位字节存放在存储器低地址单元,高位字节存放在存储器高地址单元。(4)由于立即数为指令的一部分,因此在存储器中立即数是存放在代码段中的。2、寄存器寻址操作数存放在CPU内部的某个寄存器中,指令中不出现操作数本身,而是给出存放操作数的寄存器的名字。MOVCL,BL;将BL中的8位寄存器操作数送寄存器CL中MOVAX,DX;将DX中的16位寄存器操作数送寄存器AX中MOVAX,BX(1)寄存器寻址既可用于源操作数,也可用于目的操作数。(2)并非所有寄存器都可自由使用,如:段寄存器不能作为目的操作数。(3)源、目的操作数的字长必须一致注意事项:3、存储器寻址操作数存放在存储器中,CPU取出指令后,为了获得操作数(对于源操作数)或操作数的存放地址(对于目的操作数)还要再次访问存储器,所以这种寻址方式比较慢。存储器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址基址变址相对寻址3.1直接寻址使用直接寻址方式的指令时,存储单元的有效地址直接由指令给出,而段地址如没有指令前缀,默认由数据段寄存器DS给出。例如MOVAL,[2000H];存储单元的有效地址为2000H,段地址由数据段DS指定,设DS=4000H。此指令的执行过程如图所示:指令MOVAL,[2000H]的执行过程3.2寄存器间接寻址指令中给出的寄存器的值不是操作数本身,而是操作数的有效地址EA,这种寻址方式称为寄存器间接寻址。寄存器名称外面必须加方括号,以与寄存器寻址方式相区别。这类指令中使用的寄存器有基址寄存器BX、BP及变址寄存器SI、DI。EA=(4种)[BX][SI][BP][DI]{默认DS段默认SS段寄存器间接寻址方式的EA计算┋┋┋┋操作码代码段堆栈段00107856SS×164000H+41000H41000HAHALAX56781000HBP指令MOVAX,[BP]的执行过程两点说明:1.如果指令中指定的寄存器是BX,SI或DI,则默认操作数存放在数据段中,这时要用数据段寄存器DS的内容作为段地址。物理地址=DS×16+BX或=DS×16+SI或=DS×16+DI2.如果指令中用寄存器BP进行间接寻址,则默认操作数在堆栈段中,操作数的段地址在段寄存器SS中,操作数的物理地址=SS×16+BP。3.3寄存器相对寻址操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。同样,当指令中指定的寄存器是BX,SI或DI时,默认的段寄存器是DS,当指定寄存器是BP时,默认的段寄存器是SS。EA=(8种)[BX][SI][BP][DI]{默认DS段默认SS段+8位位移量或16位位移量寄存器相对寻址方式的EA计算例MOVBX,COUNT[SI]设:DS=3000H,SI=2000H,位移量COUNT=4000H,(36000H)=5678H则物理地址=DS×16+SI+COUNT=36000H┋┋┋┋操作码代码段数据段00407856DS×163000H+36000H36000HBHBLBX56782000HSICOUNT4000H指令MOVBX,COUNT[SI]的执行过程3.4基址变址寻址操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,两个寄存器均由指令指出。EA=(4种)[BX]+[SI][BP]+[DI]{默认DS段默认SS段[BX][BP]+[SI]+[DI]基址变址寻址方式的EA计算注意:没有EA=[BX][SI]+[BP]+[DI]{××在操作数类型不明确时,一定要指出操作数类型;MOVAL,[DI];很明确,字节MOVBX,[SI];很明确,字MOV[SI],10H;不明确,字节?字?INC[BX];不明确MOV[BX],[DX];不明确,且不正确例MOVAX,[BX][SI]MOVAX,[BX+SI]设DS=3000H,BX=1200H,SI=0500H,(31700H)=ABCDH则物理地址=DS×16+BX+SI=30000H+1200H+0500H=31700H执行过程如下:┋┋┋代码段数据段CDABDS×163000H31700HAHALAXABCDBX1200HSI0500H+指令MOVAX,[BX][SI]的执行过程3.5基址变址相对寻址操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位位移量之和。EA=(8种)[BX]+[SI]+8位或16位位移量[BP]{默认DS段默认SS段[BX][BP]+[DI]+8位或16位位移量+[SI]+8位或16位位移量+[DI]+8位或16位位移量相对基址变址寻址方式的EA计算例MOVAX,COUNT[BX][SI]MOVAX,COUNT[BX+SI]MOVAX,[COUNT+BX+SI]设DS=2000H,BX=1500H,SI=0300H,COUNT=0200H,(21A00H)=1234H则物理地址=DS×16+BX+SI+COUNT=20000H+1500H+0300H+0200H=21A00H指令执行后,AX=1234H,执行过程如下:┋┋┋┋操作码代码段数据段00023412DS0200H×162000H+MASK21A00HAHALAX1234BX1500HSI0300H21A00H指令MOVAX,COUNT[BX][SI]的执行过程COUNT①立即数寻址②寄存器寻址③存储器寻址{{直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址分三大类8086的寻址方式汇总: