汇编作业1:选择填空题:单项选择题:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是(D)A.DB41,42,43,44,45,46B.DW4142H,4344H,4546HC.DW‘AB’,‘CD’,‘EF’D.DW‘BA’,‘DC’,‘FE’2.在同一程序段中,定义下面伪指令,正确的是(C)?A.PORTEQUALB.CONTEQU3500HANDOFFHPORTEQU2000HC.STRlDB‘ABCD’D.STR2DW‘ABCD’3.DA2DW‘AB’,‘CD’┇MOVAX,WORDPTRDA2+1上述语句执行后AX中的值是(C)A.‘AD’B.‘BC’C.‘DA’D.‘CB’4.下列数据定义语句中可实现留空20H个字节存储单元的是(D)A.DB20DUP(?)B.DW20HDUP(?)C.DB10HDUP(4DUP(?))D.DB20HDUP(?)5.设DL=55H,执行指令后能使DL中的数据为OAAH的指令是(D)A.TESTDL,OAAHB.ORDL,OAAHC.NEGDLD.XORDL,OFFH6.DW10HDUP(2DUP(3),300H)上述定义的数据单元中,能构成0303H字存储单元的个数是(D)A.10HB.20HC.1EHD.OFH7.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是(B)A.BXB.BPC.SID.DI8.下列指令中有语法错误的是(C)A.PUSHAXB.PUSH[20H+SI+BX]C.POPCSD.PUSHCS9.循环控制指令LOOPNZ/LOOPNE继续执行循环的条件是(B)A.CX≠0且ZF=1B.CX≠0且ZF=0C.CX≠0或ZF=1D.CX≠0或ZF=010.设AX=0CCBBH,CF=1ANDAX,7FFEHRCRAX,1上述两条指令执行后,AX和CF中的内容分别是(C)A.AX=265DH,CF=0B.AX=265DH,CF=1C.AX=A65DH,CF=0D.AX=A65DH,CF=111.把BL中的数据输出到端口8CH中,正确指令是(C)A.OUT8CH,BLB.IN8CH,BLC.MOVAL,BLD.MOVAL,BLOUT8CH,ALIN8CH,AL12.结果为零的条件转移指令,其测试条件是(B)A.ZF=1B.ZF=0C.SF=lD.SF=013.下面程序段完成测试DA_BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中空格里应填的语句是MOVCH,0TESTDA_BYTE,80H______________MOVCH,0FFHZERO:MOVDH,CH(C)A.JNZZEROB.JSZEROC.JZZEROD.JCZERO14.设NUM=11011011B,指令“MOVAX,NUMSHL3”执行后AX中的值是(B)A.11011011000BB.11011000BC.00011011BD.00011011011B15.设SP初值为3050H,执行指令PUSHBX后,SP的值是(B)A.304FHB.304EHC.3048HD.3049H16.下列指令执行后影响CF值的是(D)A.DECB.XCHGC.LEAD.SHL17.设AL=57H,BL=24H,执行指令SUBAL,BL后,寄存器内容为(B)A.AL=57H,BL=24HB.AL=33H,BL=24HC.AL=57H,BL=33HD.AL=33H,BL=018.设CL=8(6),AL=0C8H,执行SARAL,CL后,AL中的数据是(A)A.0FFHB.80HC.00HD.0FEHB19.在程序运行过程中,确定下一条指令的物理地址的计算表达式是(D)。(A)DS*16+SI(B)SS*16+SP(C)ES*16+DI(D)CS*16+IP20.物理地址(10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H,从地址10FF1H中取一个字的内容是(B)。(A)1020H(B)3020H(C)2030H(D)2010H21.下列指令中操作数在代码段中的是(A)。?(A)MOVAL,42H(B)ADDAL,BL(C)SUB[BX],DI(D)INC[DI]22.下列指令执行后,对源操作数和目的操作数均无影响的是(D)。(A)MOV[BX+2],AX(B)SUBAX,2467H(C)ADD[SI],BX(D)CMPAX,BX23.数据段定义如下,要求实现取DA1的偏移地址送到SI寄存器中,下面的指令错误的是:(D)。DA1DB50HDUP(?)DA2DWDA1(A)LEASI,DA1(B)MOVSI,OFFSETDA1(C)MOVSI,DA2(D)MOVSI,DA124.设(SS)=1234H,(SP)=0102H,执行PUSHBX后,堆栈顶部的物理地址是(A)。(A)12440H(B)12444H(C)12344H(D)12340H25.下面数据段共占用(D)字节的存储空间。da1DB'ABCDEFGHIJ'da2DW10DUP(20H)da3EQU100(A)21(B)31(C)20(D)30a)将AX清零,下列指令错误的是(C)。(A)SUBAX,AX(B)XORAX,AX(C)ORAX,00H(D)ANDAX,00Hb)设(AL)=79,ADDAL,0B1H指令执行后,CF和OF的值是(D)。(A)CF=0OF=1(B)CF=1OF=1(C)CF=0OF=0(D)CF=1OF=0c)设AX=1000H,执行上述指令后,正确的结果是(B)。d)NEGAXNOTAX(B)(A)AX=1001H(B)AX=0FFFH(C)AX=1000H(D)AX=0111H填空题1.汇编语言程序中常量定义伪指令在(汇编)阶段被执行。?(不太了解常量定义伪指令的一些知识点)2.0B1D:1000单元的物理地址是(0C1D0H),该物理地址的另一种分段表示形式是(0A12:20B0)。3.在8088CPU中按照分段规则对1M存储空间进行分段,其可作为段首单元的地址共有(16)个,每个相邻的段首地址相差(64K)个单元。4.一个汇编语言程序最少由(1)个代码段构成,(选择:必须有一个/可有可无)可有可无数据段,数据段内(不可以)(选择:可以/不可以)存储指令代码。5.指令MOVAX,SEGBUF的功能是把(BUF变量的所在段的段地址值)送到AX中。6.要使AL寄存器中数据的高4位不变,低4位取反,可使用XORAL,(0FH)指令实现。7.要使AL寄存器中负数变为正数,可以使用(NOT/NEG)指令实现。8.指令MOVAX,ES:[BX][SI]源操作数的物理地址计算表达式是(ES*10H+BX+SI)。9.条件转移指令的跳转地址范围是(-128~+127),如(IP)=1000H,位移量是0F8H,则条件转移指令的转移地址是(10F8H)。10.条件转移指令计算跳转地址的方法是(当前IP+位移量),它的寻址方式属于(相对寻址)。11.写出将AL寄存器中的数据输出到378H号端口的指令(OUT378H,AL)。12.已知(BX)=2AH,字变量VAR存放的内容为0AAH,执行指令XORBX,VAR后(BX)=(80H)。13.已知(BX)=2AH,字变量VAR存放的内容为0AAH,执行指令CMPBX,VAR后(BX)=(2AH)。14.MOVAX,-2指令执行后,AX寄存器中的16进制数值是(FFFEH)。15.已知AX=1234H,CL=4,CF=1,RORAX,CL指令执行后,AX=(4123)H。汇编作业2-分析题1.现有程序如下:DATASEGMENTBUFDB‘AI39*5867Jfe=KJYKGNGK339385’C=$-BUFN1DB0N2DB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CLEASI,BUFL:MOVAL,[SI]CMPAL,30HJBNEXTCMPAL,39HJANEXTINCN1JMPCONTNEXT:INCN2CONT:INCSILOOPLMOVAH,4CHINT21HCODEENDSENDSTART请回答:(1)该程序完成什么功能?答:统计BUF字符串中数字的个数和非数字的个数(2)该程序执行完后,N1和N2的内容各是多少?答:N1中为0CH,N2中为0FH2.现有程序如下:DATASEGMENTBUFDB‘ER39*5867JgeewFGHYUO9385’C=$-BUFDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CLEASI,BUFL:MOVAL,[SI]CMPAL,61HJBNEXTCMPAL,7AHJANEXTSUBAL,20HMOV[SI],ALNEXT:INCSILOOPLMOVAH,4CHINT21HCODEENDSENDSTART请回答:(1)该程序完成什么功能?答:将字符串中的小写字母转换成大写字母(2)该程序执行完后,BUF缓冲区的内容是什么?答:程序执行完后,BUF缓冲区的内容为‘ER39*5867JGEEWFGHYUO9385’3.现有程序如下:DATASEGMENTBUFDB47H,0A4H,93H,38,-23,55H,251,0,78HC=$-BUFBUF1DBCDUP(0)BUF2DBCDUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CLEASI,BUFLEADI,BUF1LEABX,BUF2L:MOVAL,[SI]CMPAL,0JGEPMOV[BX],ALINCBXJMPNEXTP:MOV[DI],ALINCDINEXT:INCSILOOPLMOVAH,4CHINT21HCODEENDSENDSTART请回答:(1)该程序完成什么功能?(2)该程序执行完后,BUF1和BUF2缓冲区的内容各是什么?答:(1)该程序的功能是:若BUF缓冲区的内容是大于等于0的数,则送至BUF1中,若为小于0的数则送至BUF2中(2)BUF1缓冲区的内容是:47H,38,55,0,78BUF2缓冲区的内容是:0A4,93H,-23,2514.现有程序如下:DATASEGMENTBUF1DB100DUP(?)BUF2DB200DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,100LEASI,BUF1LEADI,BUF2+100L:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPLMOV,AH,4CHINT21HCODEENDSENDSTART请回答:(1)该程序完成什么功能?(2)如果将指令“LEADI,BUF2+100”改为“LEADI,BUF2”之后,程序执行完后的结果如何?答:(1)该程序的功能是:将BUF1缓冲区的的100个字节内容送到BUF2缓冲区的后100个字节单元中(2)将BUF1缓冲区的的100个字节内容送到BUF2缓冲区的前100个字节单元中5.现有程序如下:DATASEGMENTBUF1DB100DUP(?)BUF2DB100DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,100LEASI,BUF1LEADI,BUF2L:MOVAL,[SI]CMPAL,100JBNEXTMOV[DI],ALINCDINEXT:INCSILOOPLMOVAH,4CHINT21HCODEENDSENDSTART请回答:(1)该程序完