START | ||
ST | GR0,REG | |
SLL | GR0,3 | |
SUB | GR0,REG | |
RET | ||
REG | DS | 1 |
END |
4、二进制数与十进制数的转换
1)二化十:
将二进制数转换为十进制数的一种常用算法是将被转换的二进制数依次被 10i( 对 16 位二进制数,i为 4、3、2、1、0)除,所得的商即为该十进制数位的值,其余数再被下一个 10i 除。一般用减法代替除法,即一边减 10i,一边计数器加 1,直到不够减再进行下一位 10i-1。以求得十进制数的各位数。
例如:一个相当于十进制数 34635 的二进制数,可先用 10000 去减,可减 3 次,得万位数是 3;再用 1000 去减,得千位数是 4;……
【例1】将 GR0 中的二进制数转换为十进制数的ASCII 码放入字符串 STR 中。
START | |||
LEA | GR1,0 | ;减数表及字符串指针 | |
LEA | GR2,5 | ;循环计数器 | |
L1 | LEA | GR3,48 | ;该十进制位的数码预置 0 的 ASCII 码 |
L2 | LEA | GR3,1,GR3 | ;数码位的 ASCII 码加 1 |
SUB | GR0,SNO,GR1 | ;操作数减去 10i | |
JPZ | L2 | ;够减,继续 | |
ADD | GR0,SNO,GR1 | ;不够减,操作数及数码位的 ASCII 码恢复 | |
LEA | GR3,-1,GR3 | ||
ST | GR3,STR,GR1 | ;转换好的该位 ASCII 码存入结果字符串 | |
LEA | GR1,1,GR1 | ;地址指针加 1 | |
LEA | GR2,-1,GR2 | ;循环计数器减 1 | |
JNZ | L1 | ;未结束,继续下一位 | |
RET | |||
SNO | DC | 10000 | |
DC | 1000 | ||
DC | 100 | ||
DC | 10 | ||
DC | 1 | ||
STR | DS | 5 | ;转换结果字符串 |
END |
1)十