首页 汇编语言期末习题

汇编语言期末习题

举报
开通vip

汇编语言期末习题-.z.汇编语言期末习题第二章8086计算机组织〔主要是寻址方式以及地址存储方式〕2.2有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。答:存储器里的存放情况如右以下图所示:000B0HE5H000B1H1EH000B2H000B3H3CH000B4H2AH2.3在IBMPC机的存储器中存放信息如右以下图所示。试读出30022H和30024H字节单元的容,以及30021H和30022H字单元的...

汇编语言期末习题
-.z.汇编语言期末习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 第二章8086计算机组织〔主要是寻址方式以及地址存储方式〕2.2有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。答:存储器里的存放情况如右以下图所示:000B0HE5H000B1H1EH000B2H000B3H3CH000B4H2AH2.3在IBMPC机的存储器中存放信息如右以下图所示。试读出30022H和30024H字节单元的容,以及30021H和30022H字单元的容。如图:3002012H3002134H30022ABH30023CDH30024EFH答案:30020H:12H30021H:34H30022H:ABH30023H:CDH30024H:EFH2.4在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是3017AH。2.5如果在一个程序开场执行以前(CS)=0A7F0H,(如16进制数的最高位为字母,那么应在其前加一个0)(IP)=2B40H,试问该程序的第一个字的物理地址是多少?答:该程序的第一个字的物理地址是0AAA40H。第三章8086的指令系统和寻址方式3.1给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1)立即寻址(2)直接寻址(3)使用BX的存放器寻址(4)使用BX的简接寻址(5)使用BX的存放器相对寻址(6)基址变址寻址(7)相对基址变址寻址答:(1)操作数在指令中,即立即数;(2)EA=D=7237H;(3)无EA,操作数为(BX)=637DH;(4)EA=(BX)=637DH;(5)EA=(BX)+D=0D5B4H;(6)EA=(BX)+(SI)=8E18H;(7)EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丧失,因此EA=004FH。3.2试根据以下要求写出相应的汇编语言指令(1)把BX存放器和DX存放器的容相加,结果存入DX存放器中。(2)用存放器BX和SI的基址变址寻址方式把存储器中的一个字节与AL存放器的容相加,并把结果送到AL存放器中。(3)用存放器BX和位移量0B2H的存放器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。(5)把数0B5H与(AL)相加,并把结果送回AL中。答:(1)ADDDX,BX(2)ADDAL,[BX][SI](3)ADD[BX+0B2H],CX(4)ADDWORDPTR[0524H],2A59H(5)ADDAL,0B5H3.3写出把首地址为BLOCK的字数组的第6个字送到DX存放器的指令。要求使用以下几种寻址方式:(1)存放器间接寻址(2)存放器相对寻址(3)基址变址寻址答:(1)MOVBX,OFFSETBLOCKADDBX,(6–1)*2MOVDX,[BX](2)MOVBX,OFFSETBLOCK改为:MOVBX,(6-1)*2MOVDX,[BX+(6–1)*2]也可MOVDX,BLOCK[BX](3)MOVBX,OFFSETBLOCKMOVSI,(6–1)*2MOVDX,[BX][SI]3.4现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明以下各条指令执行完后AX存放器的容。MOVAX,1200H(1)(AX)=1200H(2)MOVAX,BX(2)(AX)=0100H(3)MOVAX,[1200H](3)(AX)=4C2AH(4)MOVAX,[BX](4)(AX)=3412H(5)MOVAX,1100[BX](5)(AX)=4C2AH(6)MOVAX,[BX][SI](6)(AX)=7856H(7)MOVAX,1100[BX][SI](7)(AX)=65B7H3.8假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出以下源操作数字段的寻址方式是什么?其物理地址值是多少?(1)MOVAX,0ABH(2)MOVAX,BX(3)MOVAX,[100H](4)MOVAX,VAL(5)MOVAX,[BX](6)MOVAX,ES:[BX](7)MOVAX,[BP](8)MOVAX,[SI](9)MOVAX,[BX+10](10)MOVAX,VAL[BX](11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]答:(1)立即方式;操作数在本条指令中(2)存放器寻址方式;操作数为(BX)=0100H(3)直接寻址方式;PA=20100H(4)直接寻址方式;PA=20050H(5)BX存放器间接寻址方式;PA=20100H(6)附加段BX存放器间接寻址方式;PA=21100H(7)BP存放器间接寻址方式;PA=15010H(8)SI存放器间接寻址方式;PA=200A0H(9)BX存放器相对寻址方式;PA=20110H(10)BX存放器相对寻址方式;PA=20150H(11)BX和SI存放器基址变址寻址方式;PA=201A0H(12)BX和SI存放器相对基址变址寻址方式;PA=201F0H3.9在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:ARRAYDW23,36,2,100,32000,54,0ZERODW"(1)如果BX包含数组ARRAY的初始地址,请编写指令将数据0传送给ZERO单元。(2)如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元。答:(1)MOVAX,[BX+(7-1)*2]MOV[BX+(7)*2],AX(2)MOVAX,ARRAY[BX]MOVARRAY[BX+2],AX3.10如TABLE为数据段中0032单元的符号名,其中存放的容为1234H,试问以下两条指令有什么区别?指令执行完后AX存放器的容是什么?MOVAX,TABLELEAAX,TABLE答:MOVAX,TABLE是将TABLE单元的容送到AX,(AX)=1234HLEAAX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H3.11执行以下指令后AX存放器中的容是什么?TABLEDW10,20,30,40,50;000AH,0014H,001EH,0028H,0032HENTRYDW3┇MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]答:(AX)=1E00H(TABLE的存储方式如右图所示)3.12以下ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:CSTRINGDB‘BASEDADDRESSING’请编写指令将字符串中的第1个和第7个字符传送给DX存放器。答:MOVDH,CSTRINGMOVDL,CSTRING+7-13.13堆栈段存放器SS的容是0FFA0H,堆栈指针存放器SP的容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的容变化过程示意图(标出存储单元的物理地址)。答:堆栈区和SP的容变化过程示意图如下左图所示。3.15求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF和OF的值。(1)1234H(2)4321H(3)CFA0H(4)9D60H答:(1)和为74D4H;SF=0,ZF=0,CF=0,OF=0(2)和为A5C1H;SF=1,ZF=0,CF=0,OF=1(3)和为3240H;SF=0,ZF=0,CF=1,OF=0(4)和为0000H;SF=0,ZF=1,CF=1,OF=03.16求出以下各十六进制数与十六进制数4AE0H的差值,并根据结果设置标志位SF、ZF、CF和OF的值。(1)1234H(2)5D90H(3)9090H(4)EA04H答:(1)差为C754H;SF=1,ZF=0,CF=1,OF=0(2)差为12B0H;SF=0,ZF=0,CF=0,OF=0(3)差为45B0H;SF=0,ZF=0,CF=0,OF=1(4)差为9F24H;SF=1,ZF=0,CF=0,OF=0(1)MOVAX,ZSUBAX,XADDAX,WMOVZ,AX(4)MOVAX,WSUBAX,XCWDMOVBX,5IDIVBXIMULYSHLAX,1;((DX),(AX))*2RCLDX,1(3)ADDY,6MOVAX,WIMULXIDIVYMOVZ,AXMOVR,DX(2)MOVBX,XADDBX,6MOVCX,RADDCR,9MOVAX,WSUBAX,BXSUBAX,CXMOVZ,AX3.17写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。(1)Z←W+(Z-X)(2)Z←W-(X+6)-(R+9)(3)Z←(W*X)/(Y+6),R←余数(4)Z←((W-X)/5*Y)*2答:以下程序都未考虑带符号数的溢出3.18程序段如下:MOVAX,1234H;(AX)=1234H,标志位不变MOVCL,4;(AX)和标志位都不变ROLAX,CL;(AX)=2341H,CF=1,SF和ZF不变DECAX;(AX)=2340H,CF=1不变,SF=0,ZF=0MOVCX,4;(AX)和标志位都不变MULCX;(AX)=8D00H,CF=OF=0,其它标志无定义INT20H试问:(1)每条指令执行完后,AX存放器的容是什么?(2)每条指令执行完后,进位、符号和零标志的值是什么?(3)程序完毕时,AX和DX的容是什么?答:(1)见注释;(2)见注释;(3)(AX)=8D00H,(DX)=03.19以下程序段中的每条指令执行完后,AX存放器及CF、SF、ZF和OF的容是什么?MOVAX,0;(AX)=0,标志位不变DECAX;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0ADDAX,7FFFH;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0ADDAX,2;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1NOTAX;(AX)=7FFFH,标志位不变SUBAX,0FFFFH;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1ADDAX,8000H;(AX)=0,CF=1,SF=0,ZF=1,OF=1SUBAX,1;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0ANDAX,58D1H;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0SALAX,1;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1SARAX,1;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0RORAX,1;(AX)=9397H,CF=1,SF和ZF不变,OF=1答:见注释。3.20变量DATAX和变量DATAY的定义如下:DATAXDW0148HDW2316HDATAYDW0237HDW4052H请按以下要求写出指令序列:(1)DATAX和DATAY两个字数据相加,和存放在DATAY中。(2)DATAX和DATAY两个双字数据相加,和存放在从DATAY开场的双字单元中。(3)解释以下指令的作用:STCMOVBX,DATAXADCBX,DATAY(4)DATAX和DATAY两个字数据相乘(用MUL)。(5)DATAX和DATAY两个双字数据相乘(用MUL)。(6)DATAX除以23(用DIV)。(5)AADW0BBDW0CCDW0DDDW0┇MOVAX,DATAXMULDATAYMOVAA,AXMOVBB,DXMOVAX,DATAXMULDATAY+2ADDBB,AXADCCC,DXMOVAX,DATAX+2MULDATAYADDBB,AXADCCC,DXADCDD,0MOVAX,DATAX+2MULDATAY+2ADDCC,AXADCDD,DX2)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADCDATAY+2,AXMOVDATAY+4,0;用于存放进位位ADCDATAY+4,0(4)RESULT1DW0DW0RESULT2DW0DW0┇MOVAX,DATAXMULDATAYMOVRESULT1,AXMOVRESULT1+2,DXMOVAX,DATAX+2MULDATAY+2MOVRESULT2,AXMOVRESULT2+2,DX(7)MOVDX,DATAX+2MOVAX,DATAXDIVDATAY(6)MOVAX,DATAXMOVBL,23DIVBL(1)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADDDATAY+2,AX(7)DATAX双字除以字DATAY(用DIV)。答:(3)DATAX和DATAY两个字数据之和加1,结果存入BX存放器。-.z.3.22试编写一程序求出双字长数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。答:程序段如下:MOVAX,AMOVDX,A+2CMPDX,0JNSZHENSHU;不是负数那么转走NEGDXNEGAXSBBDX,0ZHENSHU:MOVB,AXMOVB+2,DXINT20H3.23假设(BX)=0E3H,变量VALUE中存放的容为79H,确定以下各条指令单独执行后的结果。(1)XORBX,VALUE;(BX)=9AH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=1(2)ANDBX,VALUE;(BX)=61H,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0(3)ORBX,VALUE;(BX)=0FBH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=0(4)XORBX,0FFH;(BX)=1CH,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0(5)ANDBX,0;(BX)=00H,CF、OF都为0,AF无定义,SF=0,ZF=1,PF=1(6)TESTBX,01H;(BX)=0E3H,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=0答:见注释。3.24试写出执行以下指令序列后BX存放器的容。执行前(BX)=6D16H。MOVCL,7SHRBX,CL答:(BX)=00DAH。3.26试分析下面的程序段完成什么功能?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答:本程序段将((DX),(AX))的双字同时左移4位,即将此双字乘以10H(16)。3.27假定(DX)=0B9H,(CL)=3,(CF)=1,确定以下各条指令单独执行后DX中的值。(1)SHRDX,1;(DX)=05CH(2)SARDX,CL;(DX)=17H(3)SHLDX,CL;(DX)=5C8H(4)SHLDL,1;(DX)=72H(5)RORDX,CL;(DX)=2017H(6)ROLDL,CL;(DX)=0CDH(7)SALDH,1;(DX)=0B9H(8)RCLDX,CL;(DX)=2CCH(4)RCRDL,1;(DX)=0DCH答:见注释。3.28以下程序段执行完后,BX存放器的容是什么?MOVCL,3MOVBX,0B7HROLBX,1RORBX,CL答:(BX)=0C02DH。(5)MOVAL,‘’;空格的ASCII码送AL存放器CLDMOVDI,SEGCONAMEMOVES,DILEADI,CONAMEREPNESCASBJNENEXTDECDIMOVBX,DINEXT:┇(2)MOVCX,20STDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMEADDSI,20-1LEADI,PRLINEADDDI,20-1REPMOVSB1)MOVCX,20CLDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMELEADI,PRLINEREPMOVSB3.29假设数据段定义如下:CONAMEDB‘SPACEEXPLORERSINC.’PRLINEDB20DUP(‘’)用串指令编写程序段分别完成以下功能:(1)从左到右把CONAME中的字符串传送到PRLINE。(2)从右到左把CONAME中的字符串传送到PRLINE。(3)把CONAME中的第3和第4个字节装入AX。(4)把AX存放器的容存入从PRLINE+5开场的字节中。(5)检查CONAME字符串中有无空格字符,如有那么把第一个空格字符的地址传送给BX存放器。答:(3)MOVAX,WORDPTRCONAME+3-1(4)MOVWORDPTRPRLINE+5,AX3.33假定AX和BX中的容为带符号数,CX和DX中的容为无符号数,请用比拟指令和条件转移指令实现以下判断:(1)假设DX的容超过CX的容,那么转去执行EXCEED。(2)假设BX的容大于AX的容,那么转去执行EXCEED。(3)假设CX的容等于0,那么转去执行ZERO。(4)BX与AX的容相比拟是否产生溢出?假设溢出那么转OVERFLOW。(5)假设BX的容小于等于AX的容,那么转EQ_SMA。(6)假设DX的容低于等于CX的容,那么转EQ_SMA。答:(1)CMPDX,CXJAEXCEED(2)CMPBX,AXJGEXCEED(3)JCXZZERO(4)CMPBX,AXJOOVERFLOW(5)CMPBX,AXJLEEQ_SMA(6)CMPDX,CXEEQ_SMA3.35指令CMPAX,BX后面跟着一条格式为J…L1的条件转移指令,其中…可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一个。如果AX和BX的容给定如下:AXBX(1)1F52H1F52H(2)88C9H88C9H(3)FF82H007EH(4)58BAH020EH(5)FFC5HFF8BH(6)09A0H1E97H(7)8AEAHFC29H(8)D367H32A6H问以上8条转移指令中的哪几条将引起转移到L1?答:(1)JNB、E、JNL、JLE(2)JNB、E、JNL、JLE(3)JNB、JNBE、JL、JLE(4)JNB、JNBE、JNL、JNLE(5)JNB、JNBE、JL、JLE(6)、E、JL、JLE(7)、E、JNL、JNLE(8)JNB、JNBE、JL、JLE3.39考虑以下的调用序列:(1)MAIN调用NEAR的SUBA过程(返回的偏移地址为0400);(2)SUBA调用NEAR的SUBB过程(返回的偏移地址为0A00);(3)SUBB调用FAR的SUBC过程(返回的段地址为B200,返回的偏移地址为0100);(4)从SUBC返回SUBB;(5)SUBB调用NEAR的SUBD过程(返回的偏移地址为0C00);(6)从SUBD返回SUBB;(7)从SUBB返回SUBA;(8)从SUBA返回MAIN;(9)从MAIN调用SUBC(返回的段地址为1000,返回的偏移地址为0600);请画出每次调用及返回时的堆栈状态。答:每次调用及返回时的堆栈状态图如下所示:3.40假设(EAX)=00001000H,(EBX)=00002000H,(DS)=0010H,试问以下指令访问存的物理地址是什么?(1)MOVECX,[EAX+EBX](2)MOV[EAX+2*EBX],CL(3)MOVDH,[EBX+4*EAX+1000H]答:(1)PA=(DS)*10H+EA=00100H+00001000H+00002000H=00003100H(2)PA=(DS)*10H+EA=00100H+00001000H+2*00002000H=00005100H(3)PA=(DS)*10H+EA=00100H+00002000H+4*00001000H+1000H=00007100H3.41假设(EAX)=9823F456H,(ECX)=1F23491H,(BX)=348CH,(SI)=2000H,(DI)=4044H。在DS段中从偏移地址4044H单元开场的4个字节单元中,依次存放的容为92H,6DH,0A2H和4CH,试问以下各条指令执行完后的目的地址及其中的容是什么?(1)MOV[SI],EAX(2)MOV[BX],ECX(3)MOVEBX,[DI]答:(1)目的地址为DS:2000H,容依次为:56H,0F4H,23H和98H(2)目的地址为DS:348CH,容依次为:91H,34H,0F2H和01H(3)目的操作数为EBX存放器,(EBX)=4CA26D92H3.43请给出以下各指令序列执行完后目的存放器的容。(1)MOVEAX,299FF94HADDEAX,34FFFFH;(EAX)=2CEFF93H(2)MOVEBX,40000000SUBEBX,1500000;(EBX)=3EB00000H(3)MOVEAX,39393834HANDEAX,0F0F0F0FH;(EAX)=09090804H(4)MOVEDX,9FE35DHXOREDX,0F0F0F0H;(EDX)=6F13ADH答:见注释。3.44请给出以下各指令序列执行完后目的存放器的容。(1)MOVBX,-12MOVSXEBX,BX;(EBX)=0FFFFFFF4H(2)MOVCL,-8MOVSXEDX,CL;(EDX)=0FFFFFFF8H(3)MOVAH,7MOVZXECX,AH;(ECX)=00000007H(4)MOVAX,99HMOVZXEBX,AX;(EBX)=00000099H答:见注释。3.45请给出以下指令序列执行完后EAX和EBX的容。MOVECX,307F455HBSFEAX,ECX;(EAX)=0DBSREBX,ECX;(EBX)=25D答:见注释。3.46请给出以下指令序列执行完后AX和DX的容。MOVBX,98HBSFAX,BX;(AX)=3DBSRDX,BX;(DX)=7D答:见注释。3.49试编写一程序段,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存入DX存放器中。答:MOVAL,BLMOVAH,0;假定为无符号数,否那么用CBW指令即可DIVCLMOVAH,0SHLAX,1MOVDX,AX3.50请说明JMPDI和JMP[DI]指令的区别。答:JMPDI是转移到以(DI)容为偏移地址的单元去执行指令;JMP[DI]是转移到以(DI)间接寻址的存单元容为偏移地址的单元去执行指令。3.51试编写一程序段,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字节单元UP中;找出小于42H的无符号数的个数并存入字节单元DOWN中。答:JMPBEGINUPDB0DOWNDB0TABLEDB100HDUP(");数组BEGIN:MOVCX,100HMOVBX,-1MOVSI,0MOVDI,0L1:INCBXCMPTABLE[BX],42HJAL2L3JMPL4L2:INCSIJMPL4L3:INCDIL4:LOOPL1MOVUP,SIMOVDOWN,DI-.z.第四章汇编语言程序格式4.1指出以下指令的错误:(1)MOVAH,BX;存放器类型不匹配(2)MOV[BX],[SI];不能都是存储器操作数(3)MOVAX,[SI][DI];[SI]和[DI]不能一起使用(4)MOVMYDAT[BX][SI],ES:AX;AX存放器不能使用段超越(5)MOVBYTEPTR[BX],1000;1000超过了一个字节的围(6)MOVBX,OFFSETMYDAT[SI];MYDAT[SI]已经是偏移地址,不能再使用OFFSET(7)MOVCS,AX;CS不能用作目的存放器(8)MOVECX,AX;两个操作数的数据类型不同答:见注释。4.2下面哪些指令是非法的?(假设OP1,OP2是已经用DB定义的变量)(1)CMP15,BX;错,立即数不能作为目的操作数(2)CMPOP1,25(3)CMPOP1,OP2;错,不能都是存储器操作数(4)CMPAX,OP1;错,类型不匹配,应为CMPax,wordptrop1答:见注释。4.3假设以下指令中的所有标识符均为类型属性为字的变量,请指出以下哪些指令是非法的?它们的错误是什么?(1)MOVBP,AL;错,存放器类型不匹配(2)MOVWORD_OP[BX+4*3][DI],SP(3)MOVWORD_OP1,WORD_OP2;错,不能都是存储器操作数(4)MOVAX,WORD_OP1[DX];错,DX不能用于存储器寻址(5)MOVSAVE_WORD,DS(6)MOVSP,SS:DATA_WORD[BX][SI](7)MOV[BX][SI],2;错,[BX][SI]未指出数据类型(8)MOVAX,WORD_OP1+WORD_OP2(9)MOVAX,WORD_OP1-WORD_OP2+100(10)MOVWORD_OP1,WORD_OP1-WORD_OP2答:见注释。4.4假设VAR1和VAR2为字变量,LAB为标号,试指出以下指令的错误之处:(1)ADDVAR1,VAR2;不能都是存储器操作数(2)SUBAL,VAR1;数据类型不匹配(3)JMPLAB[SI];LAB是标号而不是变量名,后面不能加[SI](4)JNZVAR1;VAR1是变量而不是标号(5)JMPNEARLAB;应使用NEARPTR答:见注释。4.5画图说明以下语句所分配的存储空间及初始化的数据值。(1)BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,",2DUP(1,2),")(2)WORD_VARDW5DUP(0,1,2),",-5,‘BY’,‘TE’,256H答:答案如以下图所示。4.9有符号定义语句如下:BUFFDB1,2,3,‘123’EBUFFDB0LEQUEBUFF-BUFF问L的值是多少?答:L=6。4.10假设程序中的数据定义如下:LNAMEDB30DUP(")ADDRESSDB30DUP(")CITYDB15DUP(")CODE_LISTDB1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址放入AX。(2)用一条指令将CODE_LIST的头两个字节的容放入SI。(3)用一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。答:(1)MOVAX,OFFSETLNAME(2)MOVSI,WORDPTRCODE_LIST(3)CODE_LENGTHEQU$-CODE_LIST;此语句必须放在CODE_LIST语句之后4.11试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。答:DATA_SEGSEGMENTNUMDB5DATA_LISTDW-1,0,2,5,4,5DUP(")MAXDW"MINDW"DATA_SEGENDSCODE_SEGSEGMENTMAINPROCFARASSUMECS:CODE_SEG,DS:DATA_SEGSTART:PUSHDS;设置返回DOSSUBAX,AXPUSHAXMOVAX,DATA_SEG;给DS赋值MOVDS,AXMOVCX,4;程序段开场LEABX,DATA_LISTMOVAX,[BX]MOVMAX,AXMOVMIN,AXROUT1:ADDBX,2MOVAX,[BX]CMPAX,MAXJNGEROUT2MOVMAX,AXROUT2:CMPAX,MINJNLEROUT3MOVMIN,AXROUT3:LOOPROUT1;程序段完毕RETMAINENDPCODE_SEGENDSENDSTART4.12给出等值语句如下:ALPHAEQU100BETAEQU25GAMMAEQU2以下表达式的值是多少?(1)ALPHA*100+BETA;=2729H(2)ALPHAMODGAMMA+BETA;=19H(3)(ALPHA+2)*BETA–2;=9F4H(4)(BETA/3)MOD5;=3H(5)(ALPHA+3)*(BETAMODGAMMA);=67H(6)ALPHAGEGAMMA;=0FFFFH(7)BETAAND7;=01H(8)GAMMAOR3;=03H答:见注释。4.14对于下面的数据定义,各条MOV指令单独执行后,有关存放器的容是什么?FLDBDB"TABLEADW20DUP(")TABLEBDB‘ABCD’(1)MOVAX,TYPEFLDB;(AX)=0001H(2)MOVAX,TYPETABLEA;(AX)=0002H(3)MOVCX,LENGTHTABLEA;(CX)=0014H(4)MOVDX,SIZETABLEA;(DX)=0028H(5)MOVCX,LENGTHTABLEB;(CX)=0001H答:见注释。4.15指出以下伪操作表达方式的错误,并改正之。(1)DATA_SEGSEG;DATA_SEGSEGMENT〔伪操作错〕(2)SEGMENT‘CODE’;SEGNAMESEGMENT‘CODE’〔缺少段名字〕(3)MYDATASEGMENT/DATA;MYDATASEGMENT┇ENDS;MYDATAENDS〔缺少段名字〕(4)MAIN_PROCPROCFAR;删除ENDMAIN_PROC也可以┇ENDMAIN_PROC;MAIN_PROCENDP;上下两句交换位置MAIN_PROCENDP;ENDMAIN_PROC答:见注释。4.17写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。答:程序如下:D_SEGSEGMENTAUGWLABELWORDAUGENDDD99251SUMDD"D_SEGENDS;以上定义数据段;----------------------------------------------------------------E_SEGSEGMENTADDWLABELWORDADDENDDD-15962E_SEGENDS;以上定义附加段;----------------------------------------------------------------C_SEGSEGMENTMAINPROCFARASSUMECS:C_SEG,DS:D_SEG,ES:E_SEGSTART:PUSHDS;设置返回DOSSUBAX,AXPUSHAXMOVAX,D_SEGMOVDS,AX;给DS赋值MOVAX,E_SEGMOVES,AX;给ES赋值;MOVAX,AUGW;以下6条指令进展加法计算MOVBX,AUGW+2ADDAX,ES:ADDWADCBX,ES:ADDW+2;不考虑有符号数溢出MOVWORDPTRSUM,AXMOVWORDPTR[SUM+2],BXRETMAINENDPC_SEGENDS;以上定义代码段;----------------------------------------------------------------ENDSTART4.19试说明下述指令中哪些需要加上PTR操作符:BVALDB10H,20HWVALDW1000H(1)MOVAL,BVAL;不需要(2)MOVDL,[BX];不需要(3)SUB[BX],2;需要,如SUBBYTEPTR[BX],2(4)MOVCL,WVAL;需要,如MOVCL,BYTEPTRWVAL(5)ADDAL,BVAL+1;不需要答:见注释。
本文档为【汇编语言期末习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
dczly68
从事多年财务会计,税务工作的经验
格式:doc
大小:56KB
软件:Word
页数:13
分类:教育学
上传时间:2022-02-25
浏览量:1