Casl汇编语言辅导
2008-04-28 09:33:27 来源:WEB开发网2、2000年试题四
[程序说明]
(1)本子程序根据每位职工的基本工资(非负值)和他完成产品的超额数或不足数计算该职工的应发工资。
(2)主程序调用时,GR1中给出子程序所需参数的起始地址,参数的存放次序如下表:
GR1 |
a1 |
b1 | |
c1 | |
a2 | |
b2 | |
c2 | |
… | |
an | |
bn | |
cn | |
-1(结束标志) |
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
更多精彩
赞助商链接