您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言各章习题答案
1各章习题答案第一章练习题1.将下列十进制数转换为二进制、八进制和十六进制数:37,51,73,92,511答:37D=100101B=45Q=25H51D=110011B=63Q=33H73D=1001001B=111Q=49H92D=1011100B=134Q=5CH511D=111111111B=777Q=1FFH2.将下列二进制数转换为十进制、八进制和十六进制数:10000001,10011001,11111111,11110100答:10000001B=201Q=81H=129D10011001B=231Q=99H=153D11111111B=377Q=FFH=255D11110100B=364Q=F4H=244D3.将下列十六进制数转换为二进制和十进制数:325,FF,1AB,2EC答:325H=1100100101B=805DFFH=11111111B=255D1ABH=110101011B=427D2ECH=1011101100B=748D4.将下列十进制数转换为BCD码表示:121,46,732,1281答:121D=(0001,0010,0001)BCD46D=(0100,0110)BCD732D=(0111,0011,0010)BCD1281=(0001,0010,1000,0001)BCD5.将下列二进制补码转换为十进制数:10010110,00101010,11101110,11000000答:[10010110]补=-(1101001+1)B=-6AH=-106D[00101010]补=+0101010B=+2AH=+42D2[11101110]补=-(0010001+1)B=-12H=-18D[11000000]补=-(0111111+1)B=-40H=-64D6.已知[X]补=1100000B,[Y]补=0100100B,[Z]补=0011001B。求[-X]补,[-Y]补,[-Z]补;并计算[X-Y]补=?[X-Z]补=?若有溢出请给以说明。解:[-X]补=-[X]补=-1100000B=0100000B,[-Y]补=-[Y]补=-0100100B=1011100B,[-Z]补=-[Z]补=-0011001B=1100111B[X-Y]补=[X]补+[-Y]补=1100000B+1011100B=1,011,1100B有溢出,因为CP⊕CF=1;[X-Z]补=[X]补+[-Z]补=1100000B+1100111B=1,100,0111B无溢出,因为CP⊕CF=0第二章练习题1.8086CPU由EU和BIU两部分组成。2.8086CPU的基本总线周期由4个时钟周期组成,分别用T1、T2、T3、T4表示。3.存储单元的物理地址的计算用公式表示为:物理地址=段地址×16+偏移地址。4.标志寄存器中共有9个有效位用来存放条件标志和控制标志,其中CF表示进位标志。5.在8086中,奇地址存储体与系统的高八位数据线相连。访问存储器时,当读/写奇地址存储体时,数据从D8~D15上传送。6.堆栈操作是字操作。7.当CPU访问存储器时,需利用M/IO信号的高电平;而访问外设接口时,需利用该信号的低电平。第三章练习题1、试分别说明下列各指令中源操作数和目的操作数的寻址方式:①ANDAX,0FFH②ANDBL,[0FFH]③MOVDS,AX④CMP[SI],CX⑤MOVDS:[0FFH],CL⑥SUB[BP][SI],AH3⑦ADCAX,0ABH[BX]⑧ORDX,-35[BX][DI]⑨PUSHDS⑩CMC答:指令源操作数寻址方式目的操作数寻址方式①ANDAX,0FFH立即数寄存器②ANDBL,[0FFH]直接寻址寄存器③MOVDS,AX寄存器寄存器④CMP[SI],CX寄存器寄存器间接寻址⑤MOVDS:[0FFH],CL寄存器直接寻址⑥SUB[BP][SI],AH寄存器基址变址寻址⑦ADCAX,0ABH[BX]变址寻址寄存器⑧ORDX,-35[BX][DI]基址变址相对寻址寄存器⑨PUSHDS寄存器寄存器间接寻址⑩CMC隐含寻址隐含寻址2、试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。①MOV[BX][BP],AX②TEST[BP],BL③ADD[SI],DA_BYTE④ANDDH,DL⑤CMPCL,1234H⑥SHR[BX][DI],3⑦NOTCX,AX⑧LEADS,35[SI]⑨INCCX,1⑩INC[DI]答:指令错误原因①MOV[BX][BP],AX不能使用两个基址寄存器寻址②TEST[BP],BL正确③ADD[SI],DA_BYTE正确④ANDDH,DL正确⑤CMPCL,1234H不匹配,一个是字节,一个是字⑥SHR[BX][DI],3右移3位不能用立即数⑦NOTCX,AXNOT是单操作数指令⑧LEADS,35[SI]LEA不能给段寄存器赋值⑨INCCX,1INC指令本身就是加1,是单操作数指令⑩INC[DI]寄存器间址没说明是字操作还是字节操作3、下面二条指令执行后,标志寄存器中CF、AF、ZF、SF和OF分别是什么状态?4MOVAL,86ADDAL,0AAH答:CF=1;AF=1;ZF=0;SF=0;OF=14、设(SS)=1200H,(SP)=2100H,(AX)=1234H,(BX)=6789H①执行指令PUSHAX后,(SP)=20FEH②再执行指令PUSHBX,及POPAX后,(SP)=20FEH,(AX)=6789H。5、已知程序段如下:MOVAL,56HMOVCL,4ROLAL,CL说明:AL的内容是65H,程序段完成的功能是高低4位互换。6、已知(AX)=0A5C6H,(CX)=0503H,CF=1①执行以下三条指令后:(AX)=8086H,CF=1。RCLAX,CLANDAH,CHRCRAX,CL②执行以下三条指令后:(AX)=A5C0,CF=1。SARAX,CLXCHGCH,CHSHLAX,CL7、分别说明下列每组指令中的两条指令的区别。①MOVAX,TABLELEAAX,TABLE②ANDBL,0FHORBL,0FH③MOVAX,[BX]MOVAX,BX④SUBDX,CXCMPDX,CX⑤MOV[BP][SI],CLMOVDS:[BP][SI],CL答:①MOVAX,TABLELEAAX,TABLEMOV取变量的值,而LEA取变量的偏移地址②ANDBL,0FHORBL,0FHAND是将高4位清0,OR是将低4位置1③MOVAX,[BX]MOVAX,BX[BX]是将BX的内容作为偏移地址取数赋给AX,BX是将寄存器内容赋给AX④SUBDX,CXCMPDX,CXSUB保存结果到DX中,CMP不保存⑤MOV[BP][SI],CLMOVDS:[BP][SI],CL5第一条使用段缺省是SS段,第二条使用段超越用DS段8、根据所学指令,写出使AL置0的多种方法。答:包括MOVAL,0SUBAL,ALANDAL,0XORAL,AL等9、将DX、AX中存储的32位带符号数(DX中存放高16位)求补。解:利用[X]求补=0-X实现。MOVBX,AXMOVBX,0SUBBX,AXMOVAX,0SBBAX,DXMOVDX,AXMOVAX,BX10、编写程序将AX中的16位无符号数与BL中的8位无符号数相加。解:可以利用字节相加,实现字相加,注意高字节相加,要加上进位。ADDAL,BLADCAH,011、将AX中有0的各位对应的BX位取反,BX的其它位不变。解:可利用异或指令实现。NOTAXXORBX,AX12、编写一段程序,实现16位无符号数的计算:W=(X-2)/2+Y,设X、Y、Z、W是已定义的存储器操作数。解:程序如下所示。MOVAX,XSUBAX,2SHRAX,1ADDAX,YMOVW,AXXORDX,DXADCDX,06第四章习题1、某数据段中有如下定义:CNT1EQU20HCNT2DW20H比较指令MOVAX,CNT1与MOVAX,CNT2的区别。答:指令MOVAX,CNT1是立即数据寻址。指令MOVAX,CNT2是直接寻址。2、下列各题中有语法错误,请说明原因,并分别用两种方法修改。①M1DW5060H┇MOVBL,M1②M2EQU10H┇MOVM2,AL③M3DB1234④M4DW‘ABCD’答:①类型不匹配。可将M1定义为字节(DB)或将BL换为字(BX)。②符号常量不能作为目的操作数。M2可用DB定义或将M2改为源操作数。③DB是定义字节变量。可将立即数改为字节或用DW定义字变量。④字符占一个字节。可用DB定义或用DW定义二个字符。3、下面的数据定义中,包含数据’0102H’的字存储单元有多少个。DB10HDUP(1,2DUP(2))答:只有15个。因为空间里有16个01H、02H、02H,而字取值是高位地址存高字节,因此只有15个0102H字数据。4、画出下面定义的数据段的存储结构图,分析有数据3000H的字存储单元有几个,它们的偏移量分别是多少?DATASEGMENTORG30HDA1DB0,’0’,30H,0,30HDWDA1DATAENDS答:存储结构图如下图所示。3000H的字存储单元有2个,它们的偏移量分别是30H和33H。730H00H31H30H32H30H33H00H34H30H35H30H36H00H5、设某数据段定义如下:DATASEGMENTNUM1=8NUM2=NUM1+10HDA1DB‘IBMPC’DB0AH,0DHCNTEQU$-DA1DA2DW‘IB’,‘M’,’PC’,0A0DHDATAENDS说明:DA1和DA2的偏移量是多少?,NUM2和CNT的值是多少?DA+5字节单元的内容是什么?DA1和DA2的内容相同吗?为什么?答:DA1和DA2的偏移量分别是0H和6H。NUM2=18H=24D,CNT=8。DA1+5字节单元的内容是’C’DA1和DA2的内容不相同。因为对于字存储,高位地址存高字节,因此DA2的字节存储顺序是:’B’、’I’、’‘、’M’、’C’、’P’、0DH、0AH,与DA1不同。6、画出下面数据段定义的内存分配情况。(设DATA段地址为:0B70H)DATASEGMENTV1DB43,43H,’C’,’GOOD!’V2DW1200H,43H,V1,’Hi’,2DUP(1)V3DD12345678H,V2DATAENDS答:内存分配情况如下所示。002BH变量V10143H02‘C’03‘G’04‘O’805‘O’06‘D’07‘!’0800HV2的起始地址0912H1043H1100H1200HV1的偏移地址1300H14‘i’15‘H’1601H1701H1878H1956H2034H2112H2208HV2的偏移地址2300H2470HV2的段地址250BH7、有如下数据段定义:DATASEGMENTD1DB61H,53HD2DW1234H,45HD3DW20DUP(0)DATAENDS若DATA段地址为0B68H,执行下列程序后,各寄存器的值各是多少?MOVAX,SEGD1AX=0B68HMOVBX,OFFSETD3BX=0006HMOVCL,TYPED2CL=2MOVCH,SIZED2CH=2MOVDL,LENGTHD2DL=1MOVDH,SIZED3DH=408、写出下列程序段汇编后的等效指令,程序执行后,寄存器AX、BX和CX9的内容分别是多少?NUM1EQU340NUM2=30*25┇MOVAX,NUM2LENUM1;AX的值是:0000H,等效指令:MOVAX,0000HMOVBX,NUM2GTNUM1;BX的值是:FFFFH,等效指令:MOVBX,0FFFFHMOVCX,NUM2-NUM1;CX的值是:019AH,等效指令:MOVCX,019AH9、汇编语言源程序中有哪4个段寄存器?如何定义各段,若段定义中没有用ORG指令指定起始偏移地址,则缺省起始偏移地址是多少?答:4个段寄器分别是CS、DS、ES和SS。段定义的格式是:段名SEGMENT┇;段体段名ENDS若段定义中
本文标题:汇编语言各章习题答案
链接地址:https://www.777doc.com/doc-4094437 .html