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