您好,欢迎访问三七文档
设(DS)=6000H,(ES)=2000H,(SS)=1500H,(Si)=00A0H,(BX)=0800H,(BP)=1200H,数据变量VAR为0050H.请分别指出下列各条指令源操作数的寻址方式它的物理地址是多少(1)MOVAX,BX(2)MOVDL,80H(3)MOVAX,VAR(4)MOVAX,VAR[BX][SI](5)MOVAL,‘B'(6)MOVDI,ES:[BX](7)MOVDX,[BP](8)MOVBX,20H[BX]解:(1)寄存器寻址。因源操作数是寄存器,故寄存器BX就是操作数的地址.(2)立即寻址。操作数80H存放于代码段中指令码MOV之后。(3)直接寻址。(4)基址一变址一相对寻址.操作数的物理地址=(DS)×16+(SI)+(BX)+VAR=60000H+00A0H+0800H+0050H=608F0H(5)立即寻址(6)寄存器间接寻址.操作数的物理地址=(ES)×16+(BX)=20000H+0800H=20800H(7)寄存器间接寻址。操作数的物理地址=(SS)×16+(BP)=15000H+1200H=16200H(8)寄存器相对寻址.操作数的物理地址=(DS)×16+(BX)+20H=60000H+0800H+20H=60820H假设(DS)=212AH,(CS)=0200H,(IP)=1200H,(BX)=0500H,位移量DATA=40H,(217A0H)=2300H,(217E0H)=0400H,(217E2H)=9000H试确定下列转移指令的转移地址.(1)JMPBX(2)JMPWORDPTR[BX](3)JMPDWORDPTR[BX+DATA]解:转移指令分为段内转移和段间转移,根据其寻址方式的不同,又有段内的直接转移和间接转移,以及段间的直接转移和间接转移地址。对直接转移,其转移地址为当前指令的偏移地址(即IP的内容)加上位移量或由指令中直接得出;对间接转移,转移地址等于指令中寄存器的内容或由寄存器内容所指向的存储单元的内容。(1)段内间接转移。转移的物理地址=(CS)×l6+0500H=02000H+0500H=02500H(2)段内间接转移。转移的物理地址=(CS)×16+[BX]=(CS)×l6+(217A0H)=02000H+2300H=04300H(3)段间间接转移。转移的物理地址=[BX+DATA][IP]=[DS×l6+BX+DATA[=[217E0]=(217E2H)×l6+(217E0H)[CS]=[217E2H]=9000H=90000H+0400H=90400H试说明指令MOVBX,5[BX]与指令LEABX,5[BX]的区别。解:前者是数据传送类指令,表示将数据段中以(BX+5)为偏移地址的16位数据送寄存器BX.;后者是取偏移地址指令,执行的结果是(BX)=(BX)+5,即操作数的偏移地址为(BX)+5。设堆栈指针SP的初值为2300H,(AX)=50ABH,(BX)=1234H。执行指令PUSHAX后,(SP)=,再执行指令PUSHBX及POPAX之后,(SP)=(AX)=(BX)=解:堆栈指针SP总是指向栈顶,每执行一次PUSH指令SP-2,执行一次POP指令SP+2.所以,执行PUSHAX指令后,(SP)=22FEH;再执行PUSHBX及POPAX后,(SP)=22FEH,(AX)=(BX)=1234H指出下列指令的错误:(1)MOVAH,CX(2)MOV33H,AL(3)MOVAX,[SI][DI](4)MOV[BX],[SI](5)ADDBYTEPTR[BP],256(6)MOVDATA[SI],ES:AX(7)JMPBYTEPTR[BX](8)OUT230H,AX(9)MOVDS,BP(10)MUL39H解:(1)指令错。两操作数字长不相等(2)指令错。MOV指令不允许目标操作数为立即数.(3)指令错。在间接寻址中不允许两个间址寄存器同时为变址寄存器。(4)指令错。MOV指令不允许两个操作数同时为存储器操作数。(5)指令错。ADD指令要求两操作数等字长。(6)指令错。源操作数形式错,寄存器操作数不加段重设符。(7)指令错。转移地址的字长至少应是16位的。(8)指令错。对输人输出指令,当端口地址超出8位二进制数的表达范围(即寻址的端口超出256个)时,必须采用间接寻址。(9)指令正确。(10)指令错。MUL指令不允许操作数为立即数。试判断下列程序执行后,BX中的内容.MOVCL,3MOVBX,0B7HROLBX,1RORBX,CL解:该程序段是首先将BX内容不带进位循环左移1位,再循环右移3位。即相当于将原BX内容不带进位循环右移2位,故结果为:(BX)=0C02DH分别指出以下两个程序段的功能:(1)(2)MOVCX,l0CLDLEASI,FIRSTLEADI,[1200H]LEADI,SECONDMOVCX,0FOOHSTDXORAX,AXREPMOVSBREPSTOSW解:(1)该段程序的功能是:将数据段中FIRST为最高地址的10个字节数据按减地址方向传送到附加段SECOND为最高地址的向前10个单元中。(2)将附加段中偏移地址为1200H单元开始的0FOOH个字单元清0。写出完成下述功能的程序段:(1)从地址DS:0012H中传送一个数据56H到AL寄存器;(2)将AL中的内容左移两位(3)AL的内容与字节单元DS:0013H中的内容相乘(4)乘积存入字单元DS:0014H中解:MOVSI,OFFSET[0012H]MOVDI,OFFSET[0014H]MOVAL,[SI]MOVCL,2SALAL,CLMOVBL,[0013H]MULBLMOV[DI],AX选看:已知(AL)=7BH,(BL)=38H,试问执行指令ADDAL,BL后,AF、CF、OF、PF、SF和ZF的值各为多少解:AF=1,CF=0,OF=1,PF=0,SF=l,ZF=0按下列要求写出相应的指令或程序段。(1)写出两条使AX内容为0的指令。(2)使BL寄存器中的高4位和低4位互换。(3)屏蔽CX寄存器的bll,b7和b3位。(4)测试DX中的b0和b8位是否为1(1)MOVAX,0XORAX,AX;AX寄存器自身相异或,可使其内容清0(2)MOVCL,4ROLBL,CL;将BL内容循环左移4位,可实现其高4位和低4位的互换(3)ANDCX,0F777H;将CX寄存器中需屏蔽的位“与”0。也可用“或”指令实现(4)ANDDX,0101H;将需侧试的位“与”1,其余“与”0屏蔽掉CMPDX,0101H;与0101H比较JZONE;若相等则表示b0和b8位同时为执行以下两条指令后,标志寄存器FLAGS的六个状态位各为什么状态MOVAX,84A0HADDAX,9460H解:执行ADD指令后,6个状态标志位的状态分别为:在两个16位数进行加法运算时,对CF、ZF、SF和OF会产生影响,但对PF和AF标志位,只有其低8位的运算影响它们的状态。各标志位的状态分别为:AF=0,PF=1,CF=1,ZF=0,SF=0,OF=1。已知AX=8060H,DX=03F8H,端口PORT1的地址是48H,内容为40H;PORT2的地址是84H,内容为85H。请指出下列指令执行后的结果。(1)OUTDX,AL(2)INAL,PORT1(3)OUTDX,AX(4)INAX,48H(5)OUTPORT2,AX解:(1)将60H输出到地址为03F8H的端口中。(2)从PORT1读入一个字节数据,执行结果:(AL)=40H。(3)将AX=8060H输出到地址为03F8H的端口中。(4)由48H端口读人16位二进制数。(5)将8060H输出到地址为84H的端口中。请分别用DB、DW、DD伪指令写出在DATA开始的连续8个单元中依次存放数据11H、22H、33H、44H、55H、66H、77H、88H的数据定义语句.解:DB,DW,DD伪指令分别表示定义的数据为字节类型、字类型及双字型.其定义形式为:DATADB11H,22H,33H,44H,55H,66H,77H,88HDATADW2211H,4433H,6655H,8877HDATADDH,H若程序的数据段定义如下,写出各指令语句独立执行后的结果:DSEGSEGMENTDATA1DB10H,20H,30HDATA2DW10DUP()STRINGDB‘123’DSEGENDS(1)MOVAL,DATA1(2)MOVBX,OFFSETDATA2(3)LEASI,STRINGADDDI,SI解:1.取变量DATA1的值.指令执行后,(AL)=10H.2.变量DATA2的偏移地址.指令执行后,(BX)=0003H.3.先取变量STRING的偏移地址送寄存器SI,之后送SI的内容与DI的内容相加并将结果送DI.指令执行后,(SI)=0017H;(DI)=(DI)+0017H.假设数据项定义如下:DATA1DB‘HELLO!GOODMORNING!’DATA2DB20DUP()用串操作指令编写程序段,使其分别完成以下功能:(1)从左到右将DATA1中的字符串传送到DATA2中。(2)传送完后,比较DATA1和DATA2中的内容是否相同。(3)把DATA1中的第3和第4个字节装入AX。(4)将AX的内容存入DATA2+5开始的字节单元中。解:(1)MOVAX,SEGDATA1MOVDS,AXMOVAX,SEGDATA2MOVES,AXLEASI,DATA1LEADI,DATA2MOVCX,20CLDREPMOVSB(2)LEASI,DATA1LEADI,DATA2MOVCX,20CLDREPECMPSB。。。(3)LEASI,DATA1ADDSI,2LODSW(4)LEADI,DATA2ADDDI,5STOSW编写程序段,将STRING1中的最后20个字符移到STRING2中(顺序不变)。解:首先确定STRING1中字符串的长度,因为字符串的定义要求以‘$’符号结尾,可通过检测‘$’符确定出字符串的长度,设串长度为COUNT,则程序如下:LEASI,STRING1LEADI,STRING2ADDSI,COUNT-20MOVCX,20CLDREPMOVSB试编写程序,比较AX,BX,CX中带符号数的大小,并将最大的数放在AX中。解:比较带符号数的大小可使用符号数比较指令JG等。CMPAX,BXJGNEXT1XCHGAX,BXNEXT1:CMPAX,CXJGSTOMOVAX,CXSTO:HLT给出下列等值语句ALPHAEQU100BETAEQU25GRAMMEQU4试求下列表达式的值(1)ALPHA*100+BETA10025(2)(ALPHA+4)*BETA-22598(3))(BETA/3)MOD5………AMODB=A-(ADivB)*B图示一下数据段在存储器中的存放形式DATASEGMENTDATA1DB10H,34H,07H,09HDATA2DW2DUP(42H)DATA3DB‘HELLO!’DATA4EQU12DATA5DD0ABCDHDATAENDS答:…DATA1低地址DATA2DATA3DATA4DATA5高地址…阅读下面的程序段,试说明它实现的功能DATASEGMENTDATA1DB‘ABCDEFG’DATAENDS10H34H07H09H42H00H42H00H‘H’‘E’‘L’‘L’‘O’‘!’12CDAB00H00HCODESEGMENTASSUMECS:CODE,DS:DATAAAA:MOVAX,DATAMOVDS,AXMOVBX,OFFSETDATA1MOVCX,7NTXT:MOVAH,2MOVAL,[BX]XCHGAL,DLINCBXINT21HLOOPNEXTMOVAH,4CHINT21HCODEENDSENDAAAA试利用全地址译码将6264芯片接到8088系统总线上,使其所占地址范围为32000H~33FFFH。解:将地址范围展开成二进制形式如下图所示。00110010000000000000001100111
本文标题:微机原理第二版答案
链接地址:https://www.777doc.com/doc-6306761 .html