1习题44.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?⑴MOVBP,AL⑵MOVWORD_OP[BX+4*3][DI],SP⑶MOVWORD_OP1,WORD_OP2⑷MOVAX,WORD_OP1[DX]⑸MOVSAVEWORD,DS⑹MOVSP,SS:DATA_WORD[BX][SI]⑺MOV[BX][SI],2⑻MOVAX,WORD_OP1+WORD_OP2⑼MOVAX,WORD_OP1-WORD_OP2+100⑽MOVWORD_OP1,WORD_OP1-WORD_OP2【解】:⑴MOVBP,AL两个操作数不匹配⑵MOVWORD_OP[BX+4*3][DI],SP⑶MOVWORD_OP1,WORD_OP2两个内存单元之间不能直接传送数据⑷MOVAX,WORD_OP1[DX]⑸MOVSAVEWORD,DS⑹MOVSP,SS:DATA_WORD[BX][SI]当基址为BX时,选取DS寄存器⑺MOV[BX][SI],2⑻MOVAX,WORD_OP1+WORD_OP2⑼MOVAX,WORD_OP1-WORD_OP2+100⑽MOVWORD_OP1,WORD_OP1-WORD_OP24.2假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:⑴ADDVAR1,VAR2⑵SUBAL,VAR1⑶JMPLAB[SI]⑷JNZVAR1⑸JMPNEARLAB【解】:⑴ADDVAR1,VAR2ADD两个操作数不能同时为存储单元,MOVAX,VAR1ADDAX,VAR2⑵SUBAL,VAR1两个操作数不匹配SUBAX,VAR1⑶JMPLAB[SI]LAB与[SI]不能相加JMPWORDPTR[SI]⑷JNZVAR1JNZ后面应是标号,不应是变量JNZLAB⑸JMPNEARLAB缺少PTR运算符2JMPNEARPTRLAB4.3画图说明下列语句所分配的存储空间及初始化的数据值。⑴BYTE_VARDB’BYTE’,12,-12H,3DUP(0,?,2DUP(1,2),?)⑵WORD_VARDW5DUP(0,1,2),?,-5,,'BY','TE',256H【解】:(1)(2)4.4假设程序中的数据定义如下:PARTNODW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PARTNO问PLENTH的值为多少?它表示什么意义?【解】:PLENTH的值为22,它表示数据的个数。4.5有符号定义语句如下:BUFFDB1,2,3,’123’EBUFFDB0LEQUEBUFF-BUFF问L的值是多少?02HFFHFBH0202H01H02H01H-00H02H01H02H01H-00H02H01H02H01H-00HF4H0CH45H54H59H41HBYTE_VARBYTE12-12H012112120121245H00H56H00H54H00H59H00H41H--00H02H00H01H00H00H…00H02H00H01H00H00HWORD_VAR030个字节120122BYTE-5256H3【解】:PLENTH的值为6。4.6假设程序中的数据定义如下:LNAMEDB30DUP(?)ADDRESSDB30DUP(?)CITYDB15DUP(?)CODE-LISTDB1,7,8,3,2⑴用一条MOV指令将LNAME的偏移地址放入AX。⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。【解】:⑴用一条MOV指令将LNAME的偏移地址放入AX。MOVAX,OFFSETLANME⑵用一条指令将CODE_LIST的头两个字节的内容放入SI。MOVSI,WORDPTRCODE_LSIT⑶写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。CODE_LENGHTEQUCITY-CODE_LIST4.7试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。【解】:参考程序如下:DATA_SEGSEGMENTDB1DB5DATA_LISTDB-1,0,2,5,4,5DUP(?)COUNTDB5MAXDB?MINDB?DATA_SEGENDSCODE_SEGSEGMENTASSUMECS:CODE_SEG,DS:DATA_SEGSTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATA_SEGMOVDS,AXLEABX,DATA_LISTMOVCX,COUNT-1MOVAL,[BX]MOVAH,[BX+1]LOOP1:INCBX4CMPAH,ALJAELOOP1XCHGAH,ALLOOP2INCBXCMPAH,[BX]JAELISXCHGAH,[BX]JMPLOP2LIS:CMPAL,[BX]JBELOP2XCHGAL,[BX]LOOP2MOVMAX,AHMOVMIN,ALRETSTARTENDPCODE_SEGENDSENDSTART4.10给出等值语句如下:ALPHAEQU100BETAEQU25GAMMAEQU2下列表达式的值是多少?⑴ALPHA*100+BETA⑵ALPHAMODGAMMA+BETA⑶(ALPHA+2)*BETA-2⑷(BETA/3)MOD5⑸(ALPHA+3)*(BETAMODGAMMA)⑹ALPHAGEGAMMA⑺BETAAND7⑻GAMMAOR3【解】:⑴ALPHA*100+BETA100×10025=10025⑵ALPHAMODGAMMA+BETA100/(25+2)=19⑶(ALPHA+2)*BETA-2(100+2)*25=2548⑷(BETA/3)MOD5(25/3)MOD5=3⑸(ALPHA+3)*(BETAMODGAMMA)(100+3)*(25MOD2)=103⑹ALPHAGEGAMMA100GZGAMMA=0FFFFH5⑺BETAAND725AND7=1⑻GAMMAOR32OR3=34.9对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)TABLEADW10DUP(?)TABLEBDB10DUP(?)TABLECDB’1234’┇MOVAX,LENGTHTABLEAMOVBL,LENGTHTABLEBMOVCL,LENGTHTABLEC【解】:MOVAX,LENGTHTABLEAMOVAX,OOOAHMOVBL,LENGTHTABLEBMOVBL,0AHMOVCL,LENGTHTABLECMOVCL,O1H4.10对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?FLDBDB?TABLEADW20DUP(?)TABLEBDB‘ABCD’⑴MOVAX,TYPEFLDB⑵MOVAX,TYPETABLEA⑶MOVCX,LENGTHTABLEA⑷MOVDX,SIZETABLEA⑸MOVCX,LENGTHTABLEB【解】:(1)MOVAX,TYPEFLDB(AX)=1(2)MOVAX,TYPETABLEA(AX)=2(3)MOVCX,LENGTHTABLEA(CX)=20(4)MOVDX,SIZETABLEA(DX)=40(5)MOVCX,LENGTHTABLEB(CX)=1