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"。
5、1997年试题四
[程序说明]
本子程序将一个非负二进整数翻译成五位十进整数字符。
进入子程序时,在 GR0 中给出被翻译的非负二进整数,在 GR2 中给出存放五位十进整数数字字符的起始地址。
十进制数字字符用 ASCII 码表示。当结果小于五位时,左边用空白符替换;当二进整数为零时,在(GR2)+4 中存放 0 的 ASCII 码。
数字字符 0 至 9 的 ASCII 码是 48 至 57,空白符的 ASCII 码是 32。
[程序]
START | 1 | ||
LEA | GR1,0 | 2 | |
LEA | GR3,32 | 3 | |
L1 | ____(1)____ | 4 | |
JPZ | L2 | 5 | |
ST | GR3,0,GR2 | 6 | |
LEA | GR2,1,GR2 | 7 | |
LEA | GR1,1,GR1 | 8 | |
LEA | GR4,-4,GR1 | 9 | |
JNZ | L1 | 10 | |
L2 | ___(2)___ | 11 | |
L3 | ___(3)___ | 12 | |
JMI | L4 | 13 | |
SUB | GR0,SNO,GR1 | 14 | |
LEA | GR3,1,GR3 | 15 | |
___(4)___ | 16 | ||
L4 | ST | GR3,0,GR2 | 17 |
LEA | GR2,1,GR2 | 18 | |
LEA | GR1,1,GR1 | 19 | |
___(5)___ | 20 | ||
JNZ | L2 | 21 | |
RET | 22 | ||
SNO | DC | 10000 | 23 |
DC | 1000 | 24 | |
DC | 100 | 25 | |
DC | 10 | 26 | |
DC | 1 | 27 | |
END | 28 |
&