Casl汇编语言辅导
2008-04-28 09:33:27 来源:WEB开发网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 |
[解]
这是一个典型的二化十汇编语言题例,其算法是将被转换的二进制数依次被 10i(i为 4、3、2、1、0)除,所得的商即为该十进制数位的值,其余数再被下一个 10i 除。一般用减法代替除法,即一边减10i,一边计数器加 1,直到不够减再进行下一位 10i-1。
1)寄存器分配:GR0:被转换数;GR2:存放五位十进整数数字字符的起始地址。
GR1:数位计数器(兼作SNO内存数组的下标)
GR3:在初始化时放空格的ASCII码(48),在转换时作某一位的数码计数器(初始值为 0 的 ASCII 码 48)
2)SNO 内存变量依次存放 104、103、102、101、100 。
3)第 2~9 行为初始化程序,在 GR0<10i 时,对应的十进整数数字字符单元放空格(当结果小于五位时,左边用空白符替换),此过程一直进行到 GR0≥10i 或 GR1= 4(个位)。因此____(1)____应为 "CPL GR0,SNO,GR1"。
4)L2 开始进行除法(减法)。GR3 作某一位的数码计数器。从 L4 可看出,该计数值直接放到结果单元 [GR2],而按题意所放的是 ASCII 码,所以其初始值应为 0 的 ASCII 码 48。因此___(2)___为:
LEA GR3,48
5)根据算法,GR0≥10i 才做减法,故____(3)____还是 "CPL GR0,SNO,GR1"。
6) ___(4)___是 "JMP L3",即继续做这一位的减法,直至 GR0<10i。
7)L4 后 3 行是某一位结束处理:结果送到地址指针 GR2 所指的存放单元;地址指针 GR2 加 1;SNO 内存数组的下标 GR1 加 1。
8)___(5)___应该是判断除法是否做到个位结束。即下标 GR1=5,因此这一句为:
LEA GR3,-5,GR1
更多精彩
赞助商链接