2001年高程下午第三题CASL汇编请教?

penguin2000 2003-09-23 05:14:04
[程序3说明]
子程序 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

(1) LD GR0,0GR1
(2) JZE GOON
(3) EOR GR3,V1
(4) OR GR0,V0, GR3
(5) JNZ LOOP

请教高手第三个空怎么理解啊,给分的。
...全文
39 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
klbt 2003-09-29
  • 打赏
  • 举报
回复
学习。
fengfeng2003 2003-09-23
  • 打赏
  • 举报
回复
过程是这样的

若GR3为0,则与V1即1进行EOR
0000 0000 0000 0000
0000 0000 0000 0001

按位异或,相同为0,相异为1,所以
GR3变为
0000 0000 0000 0001
不就是1吗

GR3为1时道理是一样的
penguin2000 2003-09-23
  • 打赏
  • 举报
回复
所以此句的作用是在0,1之间转换,用EOR

是整个GR3在0,1之间传唤,还是GR3的最后一位在0,1之间传唤,
应该是最后一位吧。
penguin2000 2003-09-23
  • 打赏
  • 举报
回复
EOR GR3,V1,对最后一位取反那有什么意义呢?我理解不通。高手指点
fengfeng2003 2003-09-23
  • 打赏
  • 举报
回复
工作寄存器 GR3 用作处理汉字子字符串的识别标志
如果GR3为0说明处理的是~{,为1说明处理的是~}

所以此句的作用是在0,1之间转换,用EOR
fengfeng2003 2003-09-23
  • 打赏
  • 举报
回复
EOR GR3,V1
penguin2000 2003-09-23
  • 打赏
  • 举报
回复
谢谢大家了,快快忙我看看,
难道是对GR3的最后一位取反,那有什么用呢?
好像程序的意思不是这样的,

2,959

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧