习题55-1.设已定义数据段DATASEGMENT①ORG0020H②DADB10HDUP(0)DA1DB12H,34HDA2DB56H,78HADDRDWDA1,DA2;变量ADDR(指定的单元)中存放变量DA1、DA2的(16位)偏移地址。;也就是说,ADDR字存储单元的内容为变量DA1的(16位)偏移地址,ADDR+2字存储单元的内容为变量DA2的(16位)偏移地址.为使ADDR+2字存储单元中存放的内容为0022H,试用两种不同语句填写上述空格。5-2.试用DW数据定义语句改写下面两条语句,使它们在存储器中与上述语句分别有完全一致的存储情况。DA1DB‘ABCDEFGHI’DA2DB12H,34H,56H,78H,9AH,0BCH,0DEH【分析】(1)在DB伪指令中,一个字符串表达式可以连续书写少于255个的字符,每一个字符分配一个字节存储单元,按地址递增的排列顺序依次存放字符串白左至右的每一个字符。(2)在DW伪指令中,每一个字符串表达式只能由1~2个字符组成,DW伪指令为每一个字符串表达式分配两个字节存储单元。如果表达式是由两个字符组成,那么前一个字符的ASCII码存放在高字节中,后一个字符的ASCII码存放在低字节中。如果表达式由一个字符组成,那么该字存储单元的高字节存放00,而唯一字符的ASCII码存放在低字节存储单元中。DA1DW‘BA’,‘DC’,‘FE’,‘HG’,‘I’DA2DW3412H,7856H,0BC9AH,0DEH5-3.下面两条语句汇编后,NUM1和NUM2两字节存储单元中的内容分别是什么?NUM1DB(12OR6AND2)GE0EHNUM2DB(12XOR6AND2)LE0EH【分析】运算符的优先级NUM1DB(12OR6AND2)GE0EH(1)6AND2→0110∩0010=0010(2)12OR0010→1100∪0010=1110→14→0EH(3)0EHGE0EH→FFH因此,NUM1DBFFHNUM2DB(12XOR6AND2)LE0EH(1)6AND2→0110∩0010=0010(2)12XOR0010→1100⊕0010=1110→14→0EH(3)0EHLE0EH→FFH因此,NUM2DBFFH5-4.下面两条指令执行后,DA2字存储单元中的内容是什么?DA1EQUBYTEPTRDA2;DA1所指定的存储单元为DA2的低位字节DA2DW0ABCDH;(16位)字单元SHLDA1,1;(字节)逻辑左移。最高位移入CF中,最低位补0。;0CDH(1100,1101)→1,1001,1010→CF=1;DA2低位字节存储单元内容为9AH,高位字节内容不变,为ABH。SHRDA2,1;(字)逻辑右移。最低位移入CF中,最高位补0。;0AB9AH(1010,1011,1001,1010)→0101,0101,1100,1101,0;CF=0,DA2字存储单元内容为55CDH。【分析】5-5.在下面数据定义中,数据为3000H的字存储单元有几个,它们的偏移地址分别是多少?ORG30HDATA1DB0,‘0’,30H,0,30HDWDATA1【分析】5-6.在下面存储区中能构成0302H数据的字存储单元共有几个?DB8DUP(3DUP(2),2DUP(3))【分析】地址0123456789101112131415161718192021222324252627282930313233343536373839存储单元内容02020203030202020303020202030302020203030202020303020202030302020203030202020303字单元必须始于偶地址处。5-7.下面的语句汇编后,数据项$+20H和$+40H中的$值分别是多少?ORG34HDA1DW10H,$+20H,30H,$+40H【分析】地址($值)34H35H36H37H38H39H3AH3BH存储单元内容1000560030007A005-8.己定义数据段ORG0213HBYTE1DB15H,34H,56HADR1DWBYTE1下列各指令语句执行后,能使AX中数据为偶数的语句有哪些?(1)MOVAX,WORDPTRBYTE1(2)MOVAX,WORDPTRBYTE1[1](3)MOVAL,BYTEPTRADR1[1](4)MOVAX,WORDPTRBYTE1[2]【分析】5-9.下面的指令序列执行后,AX、BX、CX寄存器的内容分别是什么?ORG0202HDW1DW20H,30H…MOVAL,BYTEPTRDW1+1MOVAH,BYTEPTRDW1MOVBX,OFFSETDW1MOVCL,BYTEPTRDW1+2MOVCH,TYPEDW1【分析】5-10.下面的程序段运行后,AH和AL中的内容分别是什么?DA1DB××;××是任一数据DA2DB0FEH…MOVAL,DA1ORAL,DA2MOVAH,ALXORAH,0FFH【分析】5-11.下面的程序段运行后,CX和DX中内容分别是什么?DA3DB82H,76H,56H,OADH,7FH…MOVCX,WORDPTRDA3ANDCX,0FHMOVAL,DA3+3SHLAL,CL上述程序段运行后,AL中的内容是什么?【分析】5-12.下面的程序段运行期间,CX和DX中的内容分别是什么?DA4EQUWORDPTRDA5DA5DB0ABH,89H…SHRDA4,1MOVDX,DA4SHLDA5,1MOVCX,DA4【分析】5-13.当执行完INCBX指令且(BX)=05H时,CX和AL中的内容分别是什么?AA1DB10HDUP(2)AA2DW10HDUP(0304H)…XORBX,BXXORAL,ALXORCX,CXBB1:ADDAL,AA1[BX]ADDAL,BYTEPTRAA2[BX]INCBXLOOPBB1【分析】5-14.下面的程序段运行后,(AX)=?如用LOOPNE指令替代LOOP指令,那么上述程序段运行后,(AX)=?(CX)=?DB2DB4DUP(2,4,6,8)…LEABX,DB2MOVCX,10HXORAX,AXLOP:ADDAL,[BX]ANDAL,0FHCMPAL,8JBENEXTINCAHSUBAL,08HNEXT:LOOPLOP【分析】5-15.下面的程序段运行后,AH和AL中的内容分别是什么?DA5DB2,3,7,0AH,0FH,4,5,9,8,0CH…XORAX,AXXORCL,CLXORBX,BXLOP:TESTDA5[BX],01HJENEXTADDAL,DA5[BX]INCAHNEXT:INCBXINCCLCMPCL,10JNELOP【分析】5-16.下面程序段是根据DAY字节存储单元中内容(1~7),从表WEEK中查出对应的星期一至星期日的英文缩写,并用2号功能调用(单个字符显示)显示输出。试把空白处填上适当的指令(一个空白只填写一条指令)。WEEKDB‘MON’,‘TUE’,‘WED’,‘THU’,‘FRI’,‘SAT’,‘SUN’DAYDB3;数据1~7…XORBX,BXMOVBL,DAY①DECBL;BL←DAY-1MOVAL,BLSALBL,1;BL←2×(DAY-1)②ADDBL,AL;BL←3×(DAY-1)MOVCX,3LOP:MOVDL,WEEK[BX]MOVAH,02HINT21H③INCBXLOOPLOP【分析】地址0123456789101112131415161718192021存储单元内容MONTUEWEDTHUFRISATSUN3ASCII码4D035-17.下面是判断两个存储单元是否同为正数。如果是,则AX置0;否则AX置非0。试把空白处填上适当的条件转移指令(两个空白处要利用不同的标志位选用不同的条件转移指令,一个空白只填写一条指令)。DA6DW××DA7DW××…MOVAX,DA6MOVBX,DA7XORAX,BX;AX←DA6⊕DA7。影响标志位SF、ZF、PF,CF=0、OF=0,AF不确定。;如果DA6和DA7同为正数或负数,则SF=0,否则SF=1。(将0视为正数)①JSNEXT;SF=1←DA6和DA7一正一负,不设置AX,跳转至NEXT。TESTBX,8000H;(BX)∩(8000H)。BX的最高位是否为1?判断BX是否为负数。;影响标志位SF、ZF、PF,CF=0、OF=0,AF不确定。②JNZNEXT;ZF=0←上一条影响标志位ZF的指令运行的结果不为0,DA7和DA6为负数。MOVAX,0NEXT:…【分析】DATA1SEGMENTDA6DW0111HDA7DW8001HDISP1DB'DA6andDA7arePositiveNumber',13,10,'$'DISP2DB'DA6orDA7arenotPositiveNumberNumber',13,10,'$'DATA1ENDSCODE1SEGMENTMAINPROCFARASSUMECS:CODE1,DS:DATA1,ES:DATA1START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATA1MOVDS,AXMOVES,AXMOVAX,DA6MOVBX,DA7XORAX,BXJSNEXTTESTBX,8000HJNZNEXTLEADX,DISP1JMPDISPNEXT:LEADX,DISP2DISP:MOVAH,09HINT21HRETMAINENDPCODE1ENDSENDSTART5-18.下面程序段是判断寄存器AH和AL中第3位是否相同。如果相同,AH置0;否则AH置非0。试把空白处填上适当的指令(一个空白只填写一条指令)。①XORAH,AL;AH←AH⊕AL。按位异或,结果送AH。;对应位相同,则异或结果为零(AH的对应位为零)。;对应位不相同,则异或结果为1。;如果AH和AL的第3位相同,则AH的第3位为0,否则为1。ANDAH,08H;按位逻辑与,影响标志位SF、ZF、PF,OF=0,CF=0。AF不定。;检测第3位是否为1。;若第3位为1,则SF=0(逻辑与结果的最高位为0)、ZF=0(逻辑与结果不等于0)、PF=0(逻辑与结果的第3位为1,其余位为0)。;若第3位为0,则SF=0(逻辑与结果的最高位仍为0)、ZF=1(逻辑与结果等于0)、PF=1(逻辑与结果的所有位均为0)②JP/JPEZEROJE/JZZEROMOVAH,0FFHJMPNEXTZERO:MOVAH,0NEXT:…【分析】DATA1SEGMENTDA6DB01HDA7DB01HDISP1DB'OK',13,10,'$'DISP2DB'Different',13,10,'$'DATA1ENDSCODE1SEGMENTMAINPROCFARASSUMECS:CODE1,DS:DATA1,ES:DATA1START:PUSHDSSUBAX,AXPUSHAXMOVAX,DATA1MOVDS,AXMOVES,AXMOVAH,DA6MOVAL,DA7XORAH,ALANDAH,08HJPZEROLEADX,DISP2JMPNEXTZERO:LEADX,DISP1NEXT:MOVAH,09HINT21HRETMAINENDPCODE1ENDSENDSTART5-19.试用两条指令完成对寄存器AH和AL分别加1,且AL中加1形成的进位加在AH的最低位,AH中加1形成的进位加在AL的最低位。【分析】5-20.在数据段中有一个九九乘法表,乘数和被乘数分别在两个字节单元中。试编制一个程序,用查表法求出1位数的乘积。【分析】5-21.试编制一个程序,把DA_BY1字节存储单元的8位二进制数分解成3个八进制数,其中高位八进制数存放在DA_BY2字节存储单元,最低位八进制数存放在DA_BY2+2字节存储单元。数据单元定义如下:DA_BY1DB6BHDA_BY2DB3DUP(0)【分析】5-22.设平面上有一点P,其直角坐标为(x,y),试编制完成以下操作的程序。①若P点落在第i象限,则K单元←i(1,2