解题思想:根据十进制转换成二进制数的原则,要把abc转换成二进制数,实际上是
求出表达式
N=a×10×10十b×10十c
的值,这里a,b,c应是各个数字所对应的二进制值,十进制数字
的二进制值可由:
a='a'-'0'
得到。其中a代表任一个十进制数学,而数字0的AsCII码是
48,只要每个数字的ASCH码减去一个基数48即可。其次,
COMET机没有提供乘法指令,但是乘10是可简单地用加法来
实现。把上述表达式变换成
N=(a×10十b)×10十c
表达式经过这一变换,原来三个乘10运算变成两个乘10运算,
而且这一次优化是很有意义的,既节省了运算时间,又缩短了程
序的长度。
***************************************************************
源程序:
START
A DC a
B DC b
C DC c
TMP DS 1
BEGIN LD GR0,A ; //GR0=5=0000000000000101
SUB GR0,C48 ;a的二进制值 //GR0=-43=1111111111010101
SLA GR0,1 ;a的二倍
ST GR0,TMP
SLA GR0,2 ;a的八倍
ADD GR0,TMP ;a的十倍
ST GR0,TMP
LD GR0,B
SUB GR0,C48 ;b的二进制值
ADD GR0,TMP ;10a+b
SLA GR0,1 ;部份和的2倍
ST GR0,TMP
SLA GR0,2 ;部份和的八倍
ADD GR0,TMP ;部份和的十倍
ST GR0,TMP
LD GR0,C
SUB GR0,C48 ;c的二进制值
ADD GR0,TMP ;结果 //GR0=-4796
EXIT
C48 DC 48
END