CASL 十进制化二进制问题!
???????为什么ASCII变成BCD码不用减48,而屏蔽就行了???
例子在下面:
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 码 ???????为什么ASCII变成BCD码不用减48,而屏蔽就行了???
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