| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
三、Casl汇编语言试题解释
作者:佚名    文章来源:网络    点击数:    更新时间:2006-12-9
 

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 EX99v 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 EX99v 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 
[解] 
寄存器作用: 
GR1:源字符串地址指针,调用该子程序时,存放源字符串首地址。 
GR2:目标字符串地址指针,调用该子程序时,存放目标字符串首地址。 
GR3:用作处理汉字子字符串的识别标志。0 表示 ASCII 码(初始值),1 表示汉字。 
GR0:工作寄存器,存放待处理的字符。(从第 7 行 "CPA  GR0,MARK0" 看出)
分析:
1)从第 7 行 " CPA  GR0,MARK0" 看出,GR0 中存放待处理的字符。所以第 6 行(__(1)__)必定是一条取数指令:"LD  GR0,0,GR1" ,即把源字符串地址指针所指的字符取到 GR0 中。 
2)从第7 行及第 8 行可知,第 9 行到第 17 行是处理碰到“~”的情况,即判断后一字符是否是“~”、“{ ”及“}”。若都不是,则出错。
3)从第11 行可知,要判断是否连续两个“~”情况,而后面是继续比较,所以第 12 行(__(2)__)应该是一条“JZE”指令,而且是转移到 GOON ,即把“~”存放到目标字符串中。
4)第 13 行“CPA GR0,MARK1,GR3”应该是比较“{ ”及“}”:在中文状态比较“}”(结束),在西文状态比较“{ ”(开始)。所以这里用的是变址寻址,即由 GR3 的值是 0 或 1,决定是比较“{ ”还是“}”。
5)第 12 行(__(3)__)应该是改变汉字子字符串的识别标志 GR3 的指令,即原来是 0 的变成 1,原来是 1 的变成 0,异或指令可以达到此目的。将 GR3 与常数 1 相异或,因 Casl 没有没有立即数运算指令,只能和常数 V1 异或:EOR GR3,V1
6)第 20 行(__(4)__)是 GR0 中存放的字符送到目标字符串前的处理工作:若是西文状态( GR3 的值是 0 ),保持原样;若是中文状态( GR3 的值是 1 ),字节最高位置 1,复原为汉字子字符串,将GR0 的内容与十六进制数 0080 相或,即能达到目的。所以这条指令应是:OR GR0,V0,GR3 。
7)第 24 行将 GR0 与 0 比较,是判断字符串结束标志 0 。若非 0(未结束),继续处理。故第 25 行(__(5)__)应是一条条件转移指令:JNZ LOOP 。 
2、2000年试题四 

[程序说明] 

(1)本子程序根据每位职工的基本工资(非负值)和他完成产品的超额数或不足数计算该职工的应发工资。

  
(2)主程序调用时,GR1中给出子程序所需参数的起始地址,参数的存放次序如下表:

GR1 
a1   b1   c1   a2   b2   c2   …   an   bn   cn   -1(结束标志) 
 其中 ai 为职工 i 的基本工资;bi 为职工 i 的完成产品的超额数或不足数;ci为职工 i 的应发工资数(i = 1、2、…、n)。
bi以原码形式存放(大于零为超额,小于零为不足),基本工资与计算所得的应发工资以补码形式存放。
(3)应发工资的计算规则为:
●恰好完成定额数(此时bi = 0),应发工资即为基本工资。 
●每超额 4 件,在基本工资基础上增加 10 元(不到 4 件,以 4 计算,例如超额数为 10 时,增加 30 元)。 
●每不足 4 件,在基本工资基础上减 5 元(不到 4 件,以 4 计算,例如不足数为 5 时,减 10元)。 
[程序] 
START 1 
BEG  PUSH 0,GR1 2 PUSH 0,GR2 3 PUSH 0,GR3 4 L1  __(1)__ 5 LEA  GR0,0,GR2 6 JMI FINISH 7 LD GR3,1,GR1 8 LEA  GR2,0,GR3 9 AND GR2,C7FFF 10 JZE L3 11 SRL GR3,15 12 LEA GR2,-1,GR2 13 L2 __(2)__ 14 LEA GR2,-4,GR2 15 JPZ L2 16 L3 __(3)__ 17 __(4)__ 18 __(5)__ 19 FINISH POP GR3 20 POP GR2 21 POP GR1 22 RET 23 C7FFF DC #7FFF 24 BONUS DC 10 25 DC -5 26 END 27 

[解] 

寄存器作用:
GR1:地址指针
GR2:临时工作单元。先放 ai,后放 bi(绝对值)。
GR3:bi符号
GR0:ci---应发工资
分析:
1)从第 6 行 "LEA GR0,0,GR2" 及第 7 行 "JMI FINISH" 可知 GR0 开始时应是 ai,GR2 也应是ai,(从 LEA 指令功能分析)。所以第 5 行(1)应该是取数指令:
LD GR2,0,GR1
2)从第 8 行 "LD GR3,1,GR1" 及第 9 行 "LEA GR2,0,GR3" 可知 GR2 及 GR3 放的都是 bi(超额数或不足数),而从第 10 行 "AND GR2,C7FFF"(注意:C7FFF是 16 进制常量的标号(第 24 行)),可知 GR2 存放其绝对值。而且在该值为 0 时直接结束该职工处理(第 11 行 "JZE L3")。
3)从第 12 行 "SRL GR3,15" 可知 GR3 存放 bi 的符号(超额为 0,不足为 1)
4)从第 25、26 两行可知 BONUS 是每个超额或不足单位(4 件)的增加或扣除金额。从而得出最关键的第 14 行 (2) 应为 "ADD GR0,BONUS,GR3"。第 15、16 行指出这一加或减(GR3=1时,源操作数为负)是一循环过程,一直到 GR2<0。为防止 bi 为 4 的整数倍时多加减一次,在第 13 行中先将 GR 减 1。
5)第17、18、19行(L3)依次是该职工的应发工资回送、修改地址指针(指向下一职工)和跳到处理程序开始(L1)

 
ST GR0,2,GR1
LEA GR1,3,GR1
JMP L1 
3、1999年试题四〖程序4.1〗 
[程序4.1说明] 
本子程序是对 15 位二进位串,求它的奇校验位,生成 16 位二进制位串,使 16 位二进制位串有奇数个 1。
进入此子程序时,15 位二进制位串在 GR1 的第 1 位至第 15 位,并假定 GR1 的第 0 位是 0,求得的奇校验位装配在 GR1 的第 0 位上。 
[程序4.1] 
START 1 BEG PUSH 0,GR2 2 PUSH 0,GR3 3 LEA GR3,1 4 __ (1) __ 5 L1 SLL GR2,1 6 __ (2) __ 7 LEA GR3,1,GR3 8 L2 JZE L3 9 JMP L1 10 L3 __ (3) __ 11 ST GR3,WORK 12 ADD GR1,WORK 13 POP GR3 14 POP GR2 15 RET 16 WORK DS 1 17 END 18 

 
[分析] 
1)从说明中已知,被转换的二进位串(一个字)放在 GR1 中。 
2)第 6 行 "SLL GR2,1" 这条指令是处理奇偶校验用的,因此 GR2 也应该是工作单元,初始值为被处理数,故第 5 行( (1) )应该是 "LEA GR2,0,GR1"。 
3)从第 4、5 行看,GR3 是一个计数器(统计值为 1 的位的个数),初始值为 1,即当 GR2 一个 1也没有时,其值为 1(奇校验)。 
4)第 6 行 "SLL GR2,1" 将被处理数左移一位,需要判断最高位是否为 1,若是,计数器加 1,否则跳过这条指令。因最高位也是符号位,所以可用 "JPZ L2"( (2) )。 
5)第 9 行(L2)"JZE L3"是移位结束条件,即移到结果为 0 时结束。 
6)第 11、12、13 行,是在计数器值为奇数(即实际 1 的个数为偶数)时把被处理字 GR1 最高位变成 1。而计数器 GR3 为奇数即其最低位为 1,因此需把 GR3 的最低位变成最高位,所以第 11 行( (3) )应该是:SLL GR3,15 

[1] [2] 下一页


  • 上一篇文章:

  • 下一篇文章: 没有了
  • 相关文章