作业20.已知下列程序段:DATASEGEMNTDB1DB12H,34H,0,56HDW1DW78H,90H,0AB46H,1234HADR1DWDB1ADR2DWDW1BUFDB5DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARBEGIN:MOVAX,DATAMOVDS,AXXORCX,CX;CX←0MOVCL,3;CL←3ADDADR1,CX;ADR1←3SUBADR2,CX;ADR2←1MOVBX,ADR1;BX←3MOVDI,BX;DI←3MOVSI,ADR2;SI←1MOVAL,DB1[BX];AL←56HMOVBUF[DI],AL;BUF[3]←56HMOVAX,DW1[BX][SI];AX←0AB46HMOVWORDPTRBUF,AX;BUF←0AB46HMOVAH,4CHINT21HSTARTENDPCODEENDSENDBEGIN上述程序运行结束后,BUF中各字节单元内容是什么?21.已知程序如下,执行该程序后,回答下述问题:DATASEGEMNTBLOCKDW2,$+2,5,7,$+6,0DHCOUNTEQU$-BLOCK-2;COUNT←10AREA1DBCOUNTDUP(?)AREAEQUAREA1+COUNT-1;地址表达式,AREA←0015HDATAENDSSTACKSEGMENTPARASTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARBEGIN:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,BLOCK;SI→BLOCKLEADI,AREA;DI→AREAMOVAL,0DH;AL←0DHNO1:CMPAL,[SI]JZNEXTMOVSB;串的传送,自动修改SI和DIDECDIDECDIJMPNO1NEXT:MOVAH,4CHINT21HSTARTENDPCODEENDSENDBEGIN试填写BLOCK区与AREA1区存储单元的内容。23.仔细阅读下列程序:DATASEGMENTORG0002HDA1DB41H,45H,46H,61H,64HDA2DW4,6,$+7,14,7+$,0DA7HAD1DWDA1AD2DWDA2BUFDB5DUP(?)DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARBEGIN:MOVAX,DATAMOVDS,AXMOVES,AXXORCX,CX;CX←0MOVCL,2;CL←2ADDAD1,CX;AD1←4SUBAD2,CX;AD2←5MOVBX,AD1;BX←4MOVDI,BX;DI←4MOVSI,AD2;SI←5MOVAL,DA1[BX];AL←64HMOVBUF[DI],AL;BUF[4]←64HMOVAX,DA2[BX][SI];AX←0A700HMOVWORDPTRBUF,AX;BUF←0A700HMOVAH,4CHINT21HSTARTENDPCODEENDSENDBEGIN回答以下问题:1)数据在内存数据段存放的情况,并填具体数据。2)BUF存储区中各字节的内容是什么?24.阅读下列程序DATASEGMENTAADB0A7H,76H,13H,9FHBBDB0C0H,15H,94H,71HCCDB5DUP(0)COUNTEQU0004HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTARTPROCFARMOVAX,DATAMOVDS,AXMOVES,AXLEADI,AA;建立指针LEASI,BBANDAX,AX;CF←0MOVBX,OFFSETCC+4;BX←000CHMOVCX,COUNT;CX←4MU1:MOVAL,[DI+03H]ADCAL,[SI+03H]MOV[BX],ALDECBXDECDIDECSILOOPMU1MOVAL,00H;AL←00HRCLAL,1MOV[BX],ALRETSTARTENDPCODEENDSENDSTART回答下列问题:1)该程序完成的操作是多字节加法。2)程序执行后,地址单元CC+3中的内容为0A8H。3)程序执行后,BX所指地址单元的内容为01H。4)程序中指令MOVAL,00H不能(能,不能)用XORAL,AL指令替代。25.阅读下列程序,其中MM为一符号数。DATASEGMENTBUF1DBMMBUF2DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARMOVAX,DATAMOVDS,AXMOVBX,OFFSETBUF1;建立指针MOVDI,OFFSETBUF2MOVAH,[BX]ORAH,AH;对标志位产生影响JZZEROJLMINUSMOVAH,01H;若大于0,则AH←01HJMPASSIGNZERO:MOVAH,00H;若等于0,则AH←00HJMPASSIGNMINUS:MOVAH,0FFH;若小于0,则AH←0FFHASSIGN:MOV[DI],AH;保存结果RETSTARTENDPCODEENDSENDSTART回答下列问题:1)该程序完成的操作是实现符号函数。2)当MM为80H时,程序执行后BUF2单元的内容为0FFH。3)当MM为40H时,程序执行后BUF2单元的内容为01H。4)程序中指令ORAH,AH的作用是测试数的符号位。5)程序中MOVAH,[BX]的寻址方式是寄存器间接寻址。6)若程序中指令JLMINUS改为JNLMINUS且MM为00H时,则程序执行后BUF2单元的内容为00H。27.阅读下列程序:DATASEGMENTMITABDB7,5,9,1,3,6,8,0,2,4;加密密码表MIMADB16DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXMOVCX,10HMOVBX,OFFSETMITAB;建立指针MOVSI,OFFSETMIMAAGAIN:MOVAH,1;1号功能调用INT21H*XLATMITAB;查表MOV[SI],ALINCSILOOPAGAINMOVAH,4CHINT21HCODEENDSENDBEGIN回答以下问题:1)在程序的*处填入正确的指令SUBAL,30H,使程序完整(提示:1号功能调用的结果是使键盘输入字符的ASCII码送入AL中)。2)若依次输入数字1057,则它被转换成相应的密码依次是5760。3)若不变动其他指令,则该程序中的指令MOVBX,OFFSETMITLAB可用指令LEABX,MITAB替代。28.阅读下列程序:DATASEGEMNTDA1DB2,-3,-4,-5,34,-4,0,3,4,24COUNTEQU$-DA1;COUNT=10NUMDB?DATAENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATAST:MOVAX,DATAMOVDS,AXMOVSI,OFFSETDA1;建立指针MOVCX,COUNT-1XORBL,BL;BL←0EXCHG:MOVAL,[SI];*判断相邻两数的符号XORAL,[SI+1]TESTAL,80HJENEXTINCBLNEXT:INCSILOOPEXCHGMOVNUM,BLMOVAX,4C00HINT21HCOSEGENDSENDST回答以下问题:1)在程序的*处的正确注释为判断相邻两数的符号。2)程序执行后,NUM单元中的内容为4。3)指令MOVSI,OFFSETDA1可用指令LEASI,DA1替代。30.阅读程序DATASEGMENTNUMDW8088HRESULTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVCX,16;CX←16MOVAX,NUM;AX←8088HLOP1:ANDAX,AX;若为0,则提前结束JZDONESHLAX,1;判断是否为1JNCNEXTINCCHNEXT:DECCLJNZLOP1DONE:MOVRESULT,CHRETMAINENDPCODEENDSENDMAIN回答以下问题:1)该程序的功能是统计NUM中1的个数。2)程序运行结束时,RESULT单元的内容是3。3)指令ANDAX,AX在程序中的作用是判断AX的内容是否为0。