从高至低逐位检查待送显数据,把第一个不为"0"左边的位(无效0)改为"黑"<br /> <br />;**********************<br />;* 无效0改为F不显示 *<br />;**********************<br />;<br />OFL0: MOV R0,#08H ;R0←08H投币数十万位(00XX0000D)<br /> MOV R2,#03H ;设置循环次数(R08~R06)<br />OL4: MOV A,@R0 ;读待判断数<br /> JNZ OL1 ;不是"00"转OL1<br /> ORL A,#0FFH ;是"00"则置为"FF"<br /> MOV @R0,A ;送回内存<br /> LJMP OL2 ;转OL2继续判断下一位<br />OL1: ANL A,#0F0H ;屏蔽出左面半位(R08~R06为压缩BCD码)<br /> JNZ OL3 ;不是"0"转OL3出口<br /> MOV A,@R0 ;是"00"则重读待判断数<br /> ORL A,#0F0H ;将左面半位置为"F"<br /> MOV @R0,A ;送回内存<br /> LJMP OL3 ;转OL3出口<br />OL2: DEC R0 ;R0←07H OR R0←06H<br /> DJNZ R2,OL4 ;循环次数到?<br /> INC R0 ;R0←06H<br /> MOV @R0,#0F0H ;(06H)←F0H保留最末位显示"0"<br />OL3: RET<br />;
|