即 AND GR0,CF。而将 BCD 码拼装到压缩字前,应该将压缩字中原来的 BCD 码左移 4 位,
所以__(3)__空应为 SLL GR4,4。
第 10~17 行应该是内外循环的控制语句,也是本程序的难点。
从第 10、11 行可看出,第 15~17 行应该内循环尚未结束的处理,但第 16、17 行却是判断
外循环结束的语句。因此可知,此程序把内外循环的控制语句合在一起了。__(5)__空应是
JNZ S1 或 JMI S1,注意,应该是跳转到内循环的起点 S1,而不应该是 S0。因为此处内循环
尚未结束,不能给内循环计数器 GR3 重新赋值。
第 12~14 行应该是内循环结束的处理,即把拼装好的压缩字送回到目的地址(第 12、13
行)。但__(4)__空不应该是 JMP S0,因为这样将会越过判断外循环结束的语句第 16、17
行。所以__(4)__空应该是非跳转语句,而从__(5)__(JNZ S1)看,内循环计数器 GR3 应重
新赋值,所以__(4)__空应该是 LEA GR3,4。
标号 S0 与 WL 是没用的。另外压缩字 GR4 也不需赋初值清 0,因为 4 次移位,每次移 4 位,
原来不管是什么数都移出到外面了。
2、2001 年试题三[程序说明]
子程序 DEHZ 用来对 HZ 编码的字串做解码处理。
HZ 编码是海外华人创造的一种将含有高位为 1 的汉字双字节字串转换成易于在网络中传输
的 ASCII 字符串的变换方式。编码过程中,被转换字符串中的原汉字子字符串各字节高位作
清零处理,使之成为 ASCII 子字符串,并在其前后两端分别添加 ~{ 和 ~} 作为标记;而对于原
ASCII 子字符串,则将其中的 ~ 改写为 ~~,其余字符不变。
DEHZ 解码子程序则是 HZ 编码的复原过程。复原 ASCII 子字符串过程中遇有 ~~ 字符则改写
为一个 ~ ,遇有 ~{ 则将其后直至 ~} 标记前的各字节高位置 1,复原为汉字子字符串,同时删除
其前后标记。~的后续字符不属于以上情况均作为错误处理。
调用该子程序时, GR1 存放原始字符串首地址, GR2 存放还原后的目标字符串首地址。工作
寄存器 GR3 用作处理汉字子字符串的识别标志,进入子程序时应初始化为处理 ASCII 子字符
串。程序按照 CASL 语言的标准约定,字符串的每个字符只占用一个存储字的低八位。原始
字符串和目标字符串均以 0 作为结束标志。
[程序]
START 1
DEHZ PUSH 0,GR3 2
PUSH 0,GR2 3
PUSH 0,GR1 4
LEA GR3,0 5
LOOP __(1)__ 6
CPA GR0,MARK0 7
JNZ GOON 8
LEA GR1,1,GR1 9
LD GR0,0,GR1 10
CPA GR0,MARK0 11
__(2)__ 12
CPA GR0,MARK1,GR3 13
JNZ ERROR 14
__(3)__ 15
LEA GR1,1,GR1 16
JMP LOOP 17
ERROR OUT ERS1R,ERLEN 18
JMP EXIT 19
GOON __(4)__ 20
ST GR0,0,GR2 21
LEA GR2,1,GR2 22
评论