99年CASL题精解.doc_第1页
99年CASL题精解.doc_第2页
99年CASL题精解.doc_第3页
99年CASL题精解.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

试题2 (1999年试题4)在COMST型计算机上可以使用试卷上所付的CASL汇编语言,阅读程序说明和CASL程序,把应填入(n)处的字句,写在答卷的对应栏内。程序1说明本子程序是对15位二进位串,求它的奇校验位,生成16位二进位串,使16位二进位串中有奇数个1。进入此子程序时,15位二进位串在GR1的第1位至15位,并假定GR1的第0位是0。求得的奇校验位装配在GR1的第0位上。程序1STARTPUSH 0,GR2PUSH 0,GR3LEA GR3,1(1) SLL GR2,1(2) LEA GR3,1,GR3JZE L3JMP L1(3) ST GR3,WORKADD GR1,WORKPOP GR3POP GR2RETEND 1 BEGL1L2WORK程序2说明子程序SUM是将存储字A起的n(n0)个字求和,并将结果存于存储字B中。调用该子程序时,主程序在GR1中给出存放子程序所需参数的起始地址。参数的存放次序如下:(GR1)+0A nB +1+2程序2SUMSTARTLD GR2,0,GR1LD GR3,1,GR1LEA GR0,0ADD GR0,0,GR2LEA GR2,1,GR2(4) JNZ L5(5) ST GR0,0,GR3RETEND L5解析程序1在解答试题之前我们在这里引用1992年程序员级考试CASL语言试题的第一道题。试题说明大同小异,只是现在要求的是奇校验,而1992年要求的是偶校验而已,我们只能说,两道试题不仅仅是相似。下面看1992年的试题:START(1) (2) GR3,0GR2,0,GR1(3) (4) GR3,1,GR3(5) L1(6) GR3,WORKGR1,WORKGR3GR2DS 1END BEG LEALEALEAL2JMP L3 STADDPOPPOPRETWORK首先阅读试题说明和程序1。试题说明没有提供更多的关于算法的信息。但既然是求奇偶校验位,常用的方法是移位并逐位确认并累积1的个数,从程序中的SSL GR2,1与LEA GR3,1,GR3两条语句可以看到这种算法的轮廓。下面我们通过读程序来解答题目。在填空(1)之前是一些程序初始化工作,从程序的开头和结尾处对 GR2和GR3的POP和PUSH操作来看,前3条语句只是设置了GR3的初值,而填空(1)之后马上又对GR2进行操作,显而易见填空(1)是对GR2的赋初值进行操作。从程序中的SLL GR2,1和ADD GR1,WORK可以看出,真正在程序中进行移位比较的是GR2,求校验位的15位二进制位串还保存在GR1中,没有参与移位运算。基于上述分析,(1)的内容就很明确了,即LEA GR2,0,GR1,完成取待处理的二进制位串道GR2。从标号L1一直到语句JMP L1可以看出这是一个循环,那么作为程序中唯一的循环结构,确定1的个数应该是在这个循环结构中完成的。SLL GR2,1和LEA GR3,1,GR3增强了我们对这个判断的饿信心。不管GR3的初值如何,在循环体中必须有对当前是否为1的判断,综合考虑循环体,任务只能由语句(2)来完成。那么,这里应该是判断其为0呢,还是判断其为1?跳转的目的地是哪里?假设跳转到L2,那么我们看在这里如果GR2内容全为0的情况下要跳转到L3。如果GR2的内容全为0,则表示移位操作已经完成,程序也就应该结束了。跳转到L2的假设使跳转到L3的假设失去了意义,因为只有程序计算出二进制位串中1的个数后才能跳转到L3。由此可以断定跳转的目的地是L2。但我们仍旧不能确定填空(2)中的判断。我们假设是判断1,那么在当前位为0的情况下执行LEA GR3,1,GR3,累加1的个数。在全0的情况下也不会发生跳转,这样就多加了一个数位。如果判断填空(3)是对0的个数的处理,填空(3)和后续的两句实现写入校验位是不可能的,所以这里应该是判断0的。综合考虑,我们就填写JPZ L2。现在通读程序,不难得出结论,当程序运行到L3时,GR3的内容为二进制位串中1的个数加1。如何使GR3的值满足ST GR3,WORK和ADD GR1,WORK的要求,共同完成写二进制位串的校验位的功能?首先,从上面提到的两句来看是在GR3中形成了一个首位为1或0(依1的个数而定),其余各位全部是0的数字。我们看,由于GR3的初值是1,当二进制位串中有偶数个1时,GR3中即为奇数,反之为偶数。根据奇校验的规则,当二进制位串中有奇数个1时保持首位为0,反之则将其首位变为1。考虑到当GR3内容为偶数时末位为0为奇数时末位为1,我们可以在填空(3)中填写SLL GR3,15来使GR3的末位移动到首位,而其余各位都是0。程序2鉴于这是一道非常容易的试题,我们直接通过阅读程序来解答。首先,程序的开头是两个LD语句 ,结合程序说明,很容易确定它们的含义,即将起始地址A和数字的个数分别读进GR2和GR3。从此后对GR0的操作来看,GR0中存储的是加法运算的结果,而语句LEAGR2,1,GR2则实现地址指针的偏移。那么填空(4)中的语句究竟应该是什么呢?从下面的JNZL5来看,L5和填空(4)之间的语句构成一个完整的循环体。从整体上考虑,(4)应该是循环控制变量的修改,由于GR2和GR1都不能用作循环控制条件,结合GR3内容的含义,我们构造LEAGR3,1,GR3完成循环变量的修改。而JNZL5之后的部分,跳过填空(5),STGR0,0,GR3是将求和运算的结果存储到GR3所指示的地址中去。从程序说明可知GR3所指示的地址应该是(GR12),那么(5)的内容就很容易确定了,即LDGR3,2,GR1,完成将B传入GR3的操作。在解答上面两道题的过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论