您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言习题以及答案
习题4-4.试编程序将内存从50000H到5FFFFH的每个单元均写入数55H,并再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0;只要有错,则将AL置0FFH。解:START:MOVAX,5000HMOVDS,AXMOVSI,0MOVCX,0FFFFHLOOP1:MOVBYTEPTR[SI],55HMOVAL,[SI]CMPAL,55HJNZLOOPERRLOOP2:INCSILOOPLOOP1MOVBYTEPTR[SI],55H;最后一个单元MOVAL,[SI]CMPAL,55HJNZLOOPERRMOVAL,0;全对JMPLOOPOUTLOOPERR:MOVAL,0FFHLOOPOUT:NOP4-5.编写一个子程序,对AL中的ASCII字符添加偶校验位(bit7),即:使AL中的“1”的个数为偶数。解:ADDPARITYPROCNEARANDAL,7FHJPADDEXITORAL,80HADDEXIT:RETADDPARITYENDP4-6.利用上题的子程序,编程对内存物理地址10000H开始的1024个单元的ASCII字符加上偶校验位。解:START:MOVAX,1000HMOVDS,AXMOVSI,0MOVCX,1024LOOP1:MOVAL,[SI]CALLADDPARITYMOV[SI],ALINCSILOOPLOOP14-7、试写一子程序,完成对一个8位无符号数乘6的操作。要求:(1)只能用传送、加法及移位指令;(2)入口参数(即8位无符号数)放于AL中,出口参数(即乘6后的结果)放于AX。解:MULTI6PROCNEARPUSHBXMOVAH,0SHLAX,1;乘2MOVBX,AXSHLAX,1;乘4ADDAX,BX;乘6POPBXRETMULTI6ENDP4-8.给定如下程序片段:START:MOVAX,1000H,MOVSS,AXMOVSP,000FHMOVAX,1000HPUSHAXMOVBX,5439HPUSHBXCALLNEARPTRSUBRTPOPAXSTOP0:HLTSUBRT:PUSHBPMOVBP,SPVAAX:MOVAX,[BP+4]ADDAX,456AHMOV[BP+4],AXPOPBPRET4问:(1)程序执行到标号为SUBRT处的指令时,SP=?(2)执行完标号为VAAX的MOV指令后,AX=?(3)执行到标号为STOP0处的指令时:SP=?AX=?BX=?CF=?SF=?OF=?解:(1)程序执行完标号为SUBRT处的“PUSHBP”指令后,SP=0007H(2)执行完标号为VAAX的MOV指令后,AX=5439H(3)程序执行到标号为STOP0处的指令时(实际执行“HLT”指令之前):SP=0011HAX=99A3HBX=5439H以及以下标志寄存器的内容:CF=0SF=1OF=14-9.自符号地址为MARK开始的内存缓冲区中,存有100个学生的某门课的考试成绩。试找出成绩不低于80分以及成绩低于60分的学生个数,同时求出最高的成绩分及最低的成绩分数,并将它们分别存于符号地址为PST、FST、MAXMK及MINMK的四个单元中。要求写出完整的数据段及代码段。解:DATASEGMENTMARKDB100DUP(?)PSTDW0FSTDW0MAXMKDB0MINMKDB100DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,100MOVBX,OFFSETMARKAGAIN:MOVAL,[BX]CMPAL,MAXMKJCHIGHLMOVMAXMK,AL;updatehighestmarkHIGHL:CMPAL,MINMKJNCMKCHKMOVMINMK,AL;updatelowestmarkMKCHK:CMPAL,60JNCHIGHMKINCFST;increasetheno.ofstudentswhosemark60JMPCHKFHHIGHMK:CMPAL,80JCCHKFHINCPST;increasetheno.ofstudentswhosemark=80CHKFH:INCBXLOOPAGAINMOVAX,4C00HINT21HCODEENDSENDSTART4-10.编写一段程序,接收从键盘输入的10个数(输入回车符后结束),然后将这些数按位取反后存于BUFF开始的缓冲区中。解:DATASEGMENT;数据段BUFFDB10DUP(0);数据区DATAENDSSTACKSEGMENTSTACK‘STACK’;堆栈段DB100DUP(?)STACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVCX,10LEASI,BUFFREPT1:MOVAH,1;键入数据INT21HCMPAL,0DH;判断是否是回车键JENEXT1;若键入回车,则结束NOTALMOV[SI],ALINCSILOOPREPT1;若已输满10个数则结束NEXT1:MOVAX,4C00HINT21HCODEENDSENDSTART4-12.试定义一条能对任意寄存器进行左移指定位的宏指令。解:SHIFTMACROREG,COUNTLOCALLENDPUSHCXMOVCL,COUNTCMPCL,1JCLEND;forCOUNT1,donotshiftSHLREG,CLLEND:POPCXENDM4-13.某人写了如下宏定义,以将某寄存器中的一位16进制数转化为相应的ASCII码。试分析该宏定义是否有错,若有,试指出错误之处及原因。HEXASCMACROHEXREGPUSHFCMPHEXREG,10JLLS10ADDHEXREG,'a'-‘0’-10LS10:ADDHEXREG,‘0’POPFRETHEXASCENDP解:错误之处:(1)开始处缺:LOCALLS10(2)应去除“RET”语句(3)“HEXASCENDP”应为“ENDM”
本文标题:汇编语言习题以及答案
链接地址:https://www.777doc.com/doc-2368329 .html