Casl汇编语言辅导
2008-04-28 09:33:27 来源:WEB开发网4、1998年试题四
[程序说明]
本程序是统计字符串中数字字符"0"至"9"的出现次数。
字符串中的每个字符是用ASCII码存贮。一个存贮单元存放两个字符,每个字符占8位二进位。
程序中,被统计的字符串从左至右存放在STR开始的连续单元中,并假定其长度不超过200,字符串以'·'符作为结束。NCH开始的10个单元存放统计结果。
START | MIN | 1 | |
MIN | LEA | GR2,9 | 2 |
LEA | GR0,0 | 3 | |
L1 | _ (1) _ | 4 | |
LEA | GR2,-1,GR2 | 5 | |
JPZ | L1 | 6 | |
LEA | GR4,0 | 7 | |
LEA | GR1,0 | 8 | |
L2 | LD | GR2,STR,GR1 | 9 |
EOR | GR4,C1 | 10 | |
JNZ | RL | 11 | |
_ (2) _ | 12 | ||
RL | SR | GR2,8 | 13 |
LEA | GR3,0,GR2 | 14 | |
SUB | GR3,C9 | 15 | |
JNZ | L4 | 16 | |
L3 | LEA | GR3,0,GR2 | 17 |
SUB | GR3,CO | 18 | |
JM1 | L5 | 19 | |
LEA | GR2,1 | 20 | |
_(3)_ | 21 | ||
_(4)_ | 22 | ||
L4 | LEA | GR4,0,GR4 | 23 |
JNZ | L2 | 24 | |
_(5)_ | 25 | ||
JMP | L2 | 26 | |
L5 | SUB | GR2,C | 27 |
JNZ | L4 | 28 | |
EXIT | 29 | ||
C1 | DC | 1 | 30 |
C | DC | '·' | 31 |
C0 | DC | '0' | 32 |
C9 | DC | '9' | 33 |
STR | DS | 200 | 34 |
NCH | DS | 10 | 35 |
END | 36 |
[解]
1)第2~8行(L2以前)是初始化程序,其中第2~6行是把计数器存放单元NCH开始的十个单元清零。地址指针是GR2(递减),故((1))为:ST GR0,NCH,GR2
2)从第 8、9 行看出 GR1 是地址指针(相对于 STR)。GR2是工作单元(要处理的字符)
3)因一个字放两个字符,故GR3用作高低字节标志。起始值为0,先处理高字节,第10行指令"EOR GR4,C1"一方面判断是否第一次(结果非0),并将GR4置1。
第一次处理高字节,用逻辑右移指令将高8位内容移到低8位(高8位置0)。
第二次处理低字节,用先逻辑左移再逻辑右移指令将高8位内容置0,故(2)为:
SLL GR2,8
4)在处理过程又用 GR3 作临时工作单元,即把GR2内容送给GR3再处理。处理时先判是否>"9"(不计数)。然后减以 "0" ,使 GR3 变成 0~9。
5)计数处理是在第 21、22、23 三行中完成。使 NCH 开始的 10 个单元中与 GR3 对应的那个单元加1。因加法指令的目的操作数只能是寄存器,所以先给 GR2 送 1(第 21 行),再将 NCH 对应单元内容加到GR2 中,再将 GR2 内容送回 NCH 对应单元(采用 GR3 变址寻址)。故 (3) 及 (4) 为:"ADD GR2,NCH,GR3"及"ST GR2,NCH,GR3"。
6)在一个字的第二次处理后(用第 24、25 行判断),要修改字符串的地址指针 GR1(加1)。故 (5) 为:"LEA GR1,1,GR1"。
更多精彩
赞助商链接