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
4、1999年试题四〖程序4.2〗
[程序4.2说明]
子程序 SUM 是将存贮字 A 起的 n(n>0) 个字求和,并将结果存于存贮字 B 中。
调用该子程序时,主程序在 GR1 中给出存放子程序所需参数的起始地址。参数的存放次序如下图:
(GR1)+0 | A |
+1 | n |
+2 | B |
[程序4.2]
START | ||
SUM | LD | GR2,0,GR1 |
LD | GR3,1,GR1 | |
LEA | GR0,0 | |
L5 | ADD | GR0,0,GR2 |
LEA | GR2,1,GR2 | |
_ (4) _ | ||
JNZ | L5 | |
L3 | __(5) | |
ST | GR0,0,GR3 | |
RET | ||
END |
[分析]
1)GR1 为参数表起始地址
2)GR2 为数组地址指针,起始值为A
3)GR3 为计数器,初始值为数组长度 n。
4)GR0 为累加和工作单元
5)( (4) )应该是计数器减 1:LEA GR3,-1,GR3
6)( (5) )应把结果单元地址 B 赋给 GR3:LD GR3,2,GR1
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 |
[