将十进制数转换为二进制数的算法基础是下面公式:
N = (Dn-1*10n-1+Dn-2*10n-2+……+D1*101+D0*100
= ((…((Dn-1*10+Dn-2)*10+……+D1)*10+D0)*10
可以用循环程序实现此公式,*10 可用移位及加法指令完成。
【例2】将存放在字符串 STR 中的五位十进制数(<65536)的 ASCII 码转换成二进制数放到 GR0 中 。
START | |||
LEA | GR0,0 | ;转换结果寄存器清 0 | |
LEA | GR2,5 | ;循环计数器 | |
LEA | GR1,0 | ;地址指针(偏移量) | |
L1 | SLL | GR0,1 | ;转换结果*10,先乘以 2 |
ST | GR0,REG | ;暂存 2*X | |
SLL | GR0,2 | ;2*X*4=8*X | |
ADD | GR0,REG | ;8*X + 2*X | |
LD | GR3,STR,GR1 | ;取一位 ASCII 码 | |
AND | GR3,C000F | ;将 ASCII 码变成 BCD 码 | |
ST | GR3,REG | ;结果暂存 | |
ADD | GR0,REG | ;将新的一位 BCD 码加到转换结果中 | |
LEA | GR1,1,GR1 | ;地址指针加 1 | |
LEA | GR2,-1,GR2 | ;循环计数器减 1 | |
JNZ | L1 | ;未结束,继续下一位 | |
RET | |||
C000F | DC | #000F | ;十六进制常数,屏蔽高 12 位二进制数 |
STR | DC | ''35475'' | |
REG | DS | 1 | ;暂存单元 |
END |
5、求累加和
【例1】将变量 NUMBER 中的 5 个二进制数累加后放入变量 SUM 中。
START | |||
LEA | GR2,NUMBER | ;地址指针 | |
LEA | GR3,5 | ;循环计数器 | |
LEA | GR0,0 | ;累加和清 0 | |
L1 | ADD | GR0,0,GR2 | ;累加 |
LEA | GR2,1,GR2 | ;地址指针指向下一个二进制数 | |
LEA | GR3,-1,GR3 | ;计数器减 1 | |
JNZ | L1 | ;未完,继续 | |
ST | GR0,SUM | ;累加结束,累加和送入 SUM 单元 | |
RET | |||
NUMBER | DS | 5 | |
SUM | DS | 1 | |
END |