2002,2001年高程试题
[程序说明]
本程序将 80 个 ASCII 编码的数字字符转换成 BCD 码(二十进制码),并将每四个 BCD 码压缩在一个字中。见下面图示。
程序中约定原始数字字符存放在 SJ 开始的连续存区中,转换和压缩结果存放在 YS 开始的连续存区中。
数字字符数据
地址 ASCII
SJ 0033H '3'
+1 0036H '6'
+2 0038H '8'
+3 0032H '2'
... ...
压缩后的数据
地址 BCD码
YS 3682H
... ...
[程序]
Y START
LEA GR1,0
__(1)__
S0 LEA GR3,4
S1 LD GR0,SJ,GR2
__(2)__
ST GR0,WK
__(3)__
OR GR4,WK
LEA GR3,-1,GR3
JNZ S2
ST GR4,YS,GR1
LEA GR1,1,GR1
__(4)__
S2 LEA GR2,1,GR2
CPL GR2,C80
__(5)__
WL EXIT
SJ DS 80
WK DS 1
CF DC #000F
C80 DC 80
YS DS 20
END
子程序 DEHZ 用来对 HZ 编码的字串做解码处理。
HZ 编码是海外华人创造的一种将含有高位为 1 的汉字双字节字串转换成易于在网络中传输的ASCII 字符串的变换方式。编码过程中,被转换字符串中的原汉字子字符串各字节高位作清零处理,使之成为 ASCII 子字符串,并在其前后两端分别添加 ~{ 和 ~} 作为标记;而对于原 ASCII 子字符串,则将其中的 ~ 改写为 ~~,其余字符不变。
DEHZ 解码子程序则是 HZ 编码的复原过程。复原 ASCII 子字符串过程中遇有 ~~ 字符则改写为一个 ~ ,遇有 ~{ 则将其后直至 ~} 标记前的各字节高位置1,复原为汉字子字符串,同时删除其前后标记。~的后续字符不属于以上情况均作为错误处理。
调用该子程序时, GR1 存放原始字符串首地址, GR2 存放还原后的目标字符串首地址。工作寄存器 GR3 用作处理汉字子字符串的识别标志,进入子程序时应初始化为处理 ASCII 子字符串。程序按照 CASL 语言的标准约定,字符串的每个字符只占用一个存储字的低八位。原始字符串和目标字符串均以 0 作为结束标志。
[程序3]
START
DEHZ PUSH 0,GR3
PUSH 0,GR2
PUSH 0,GR1
LEA GR3,0
LOOP __(1)__
CPA GR0,MARK0
JNZ GOON
LEA GR1,1,GR1
LD GR0,0,GR1
CPA GR0,MARK0
__(2)__
CPA GR0,MARK1,GR3
JNZ ERROR
__(3)__
LEA GR1,1,GR1
JMP LOOP
ERROR OUT ERS1R,ERLEN
JMP EXIT
GOON __(4)__
ST GR0,0,GR2
LEA GR2,1,GR2
LEA GR1,1,GR1
CPA GR0,VO
__(5)__
EXIT P0P GR1
P0P GR2
P0P GR3
RET
V1 DC 1
V0 DC O
DC #0080
MARK0 DC '~ '
MARK1 DC '{ }'
ERSTR DC 'ERROR!'
ERLEN DC 6
END
请帮我分析一下
问题点数:20、回复次数:4Top
1 楼xzgtliu(xzjl)回复于 2003-10-04 10:43:37 得分 0
upTop
2 楼xzgtliu(xzjl)回复于 2003-10-07 11:36:23 得分 0
upTop
3 楼yixiao2099(王雨潇)回复于 2003-10-07 15:57:14 得分 0
把你解题的意思说来听听好嘛??Top
4 楼cupidvenus(小鱼儿)回复于 2003-10-14 22:03:11 得分 20
第一题:
(1) LEA GR2,0
(2) AND GR0,CF
(3) SLL GR4,4
(4) LEA GR3,4
(5) JNZ S1Top




