在汇编语言中,我们常用的码表除了显示固定要求的数值外,好像在运算程序中也有出现,本人菜鸟,对运算程序中的码表看不懂?<br />佛一段程序:(对那个用查表来实现*0.0625有点不明)请各路英豪指教!<br />;****************************************************************************<br />;处理温度BCD码子程序<br />;****************************************************************************<br />CONVTEMP: MOV A,TEMPH<br /> ANL A,#80H ;取符号位<br /> JZ TEMPC1 ;如果符号位为0,则为正值,转<br /> CLR C<br /> MOV A,TEMPL ;负值,温度值为补码形式<br /> CPL A<br /> ADD A,#01H ;将补码转换为原码<br /> MOV TEMPL,A ;将原码送回<br /> MOV A,TEMPH<br /> CPL A<br /> ADDC A,#00H ;将高位转换为原码,带进位加是为了加上低位的进位<br /> MOV TEMPH,A ;将原码送回<br /> MOV TEMPHC,#11 ;“—”号字型码顺序号<br /> JMP TEMPC11<br />;<br />TEMPC1: MOV TEMPHC,#10 ;正数消隐符号位<br />TEMPC11: MOV A,TEMPHC<br /> SWAP A ;将符号调整到高半字节<br /> MOV TEMPHC,A ;TEMPHC高半字节=符号<br /> MOV A,TEMPL <br /> ANL A,#0FH ;取出底半字节的小数部分<br /> MOV DPTR,#TEMPDOTTAB<br /> MOVC A,@A+DPTR ;小数部分以0.0625为步进,通过查表来实现乘0.0625<br /> MOV TEMPLC,A ;TEMPLC低半字节=小数部分BCD<br />;<br /> MOV A,TEMPL<br /> ANL A,#0F0H ;取TEMPL的整数部分<br /> SWAP A<br /> MOV TEMPL,A<br /> MOV A,TEMPH<br /> ANL A,#0FH ;取TEMPH的整数部分<br /> SWAP A<br /> ORL A,TEMPL ;A中存放完整的整数部分<br /> CALL HEX2BCD1 ;将单字节十六进制整数部分转BCD<br /> MOV TEMPL,A<br /> ANL A,#0F0H ;取“十”位的BCD码<br /> SWAP A ;低位存放<br /> ORL A,TEMPHC ;TEMPHC高半字节为符号<br /> MOV TEMPHC,A ;“符号”位与“十”位置入TEMPHC***********************<br /> MOV A,TEMPL<br /> ANL A,#0FH ;取“个”位的BCD码<br /> SWAP A ;高位存放<br /> ORL A,TEMPLC ;TEMPLC低半字节为小数部分BCD<br /> MOV TEMPLC,A ;“个”位与“小数”位置入TEMPLC***********************<br /> MOV A,R7 ;R7中存放“百”位BCD<br /> JZ TEMPC12 ;“百”位为0,退出<br /> ANL A,#0FH ;取“百”位(“百”位不是0,需将TEMPHC中内容重新调整<br /> ;高半字节存“百”位,低半字节存“十”位,不显示符号 )<br /> SWAP A<br /> MOV R7,A<br /> MOV A,TEMPHC<br /> ANL A,#0FH ;取“十”位的BCD码<br /> ORL A,R7<br /> MOV TEMPHC,A ;“百”位与“十”位置入TEMPHC*************************<br />TEMPC12: RET<br />;<br />;**************************************************<br />; 小数部分码表<br />;**************************************************<br />TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H,06H,07H,08H,08H,09H,09H |
|