三、试题解释(试题来自软件考试的软件设计师考试以前也称为高级程序员考试)
1、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 | |
LEA | GR1,1,GR1 | 23 | |
CPA | GR0,VO | 24 | |
__(5)__ | 25 | ||
EXIT | P0P | GR1 | 26 |
P0P | GR2 | 27 | |
P0P | GR3 | 28 | |
RET | 29 | ||
V1 | DC | 1 | 30 |
V0 | DC | O | 31 |
DC | #0080 | 32 | |
MARK0 | DC | ''~ '' | 33 |
MARK1 | DC | ''{ }'' | 34 |
ERSTR | DC | ''ERROR!'' | 35 |
ERLEN | DC | 6 | 36 |
END | 37 |
[