CASL试题分析

Author: 朱慧真 教授 Date: 1994-07-01

        ●北京大学  朱慧真教授
        试题二[答案]
        (1) LD GR3,6,GR4
        (2)         4,GR4
        (3)         5,GR4
        (4)    GR0,7,GR4
        (5) LEA GR3,1,GR3或ADD GR3,NUM1
        (6) JNZ IFEND
        [分析]
        程序说明中已给出该程序的功能并指出子程序的参数在堆栈中,参数在堆栈中的位置如图1所示。 因而得出地址:7+(GR4)的内容为待加密字长度即可记为:
        (7+(GR4))=待加密字长度,同理:
        (6+(GR4))=待加密字首址
        (5+(GR4))=密钥字长度
        (4+(GR4))=密钥字首址  从说明中还知这是个两重循环程序,密销字的循环使用是一层循环,待加密字的处理是另一层循环。  读程序,写出每个语句功能环境注释中,得出分析程序。  读分析程序,可推出在标号RESET前的语句为判断加密度的长度与密钥字的长度是否为“0”,如是零、转结束(ENDENC),否则从该标号开始是外层循环,显然空行(1)是为循环置初值,从IFEND开始是内层循环,从GOON开始是字加密处理,从字加密处理中可推出GR3为待加密字指针,GR1为密钥字指针,GR2为密钥字长度。  再读分析程序进行填空,空行(1)为循环体置初值,它下面的语句用到GR3,而在标号GOON之前不可能有置GR3初值的语句,根据以上分析这里GR3应为待加密字的首址,故(1)为:“LD GR3,6,GR4”。空(2)是形成GR1的初值密钥字首址,故(2)为:“4,GR4”。空(3)是形成GR2的初值密钥字长度,故(3)为:“5,GR4”。同时可分析出密钥字的循环使用是外层循环。(4)的上两语句为判断加密字的长度减一后是否为零,它是内循环的控制部分;它的下面语句是加密处理,它本身是存入内存的语句,这里把地址7+GR4的内容作为循环控制变量使用,因此应为把待加密字长度减一的内容(在GR0)中存入地址7+GR4,故(4)为:“GR0,7,GR4”。空行(5)的上一行是密钥字指针加一;它的下一行是密钥字的长度减一,是外循环的循环控制部分,这里只有GR3指针没有修改,故(5)为:“LEA,GR3,1,GR3”,并且还有一解为:“ADD GR3,1”。空行(6)是外循环的判断转移语句。由于它下面是无条件转RESET去重新形成密钥指针与长度的值,故它应为在GR2的内容非零时转IFEND,故(6)应为“JNZ IFEND”。