Casl汇编语言辅导
2008-04-28 09:33:27 来源:WEB开发网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
4、1999年试题四〖程序4.2〗
[程序4.2说明]
子程序 SUM 是将存贮字 A 起的 n(n>0) 个字求和,并将结果存于存贮字 B 中。
调用该子程序时,主程序在 GR1 中给出存放子程序所需参数的起始地址。参数的存放次序如下图:
(GR1)+0 |
A |
+1 |
n |
+2 |
B |
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
更多精彩
赞助商链接