黄金会员
主题
帖子
积分6701
阅读权限40
注册时间2011-3-11
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2016-1-4 00:08
|
显示全部楼层
/* ............................................................................
; 汉字内码 - 0A0A0H = 区位码
; 每区94个汉字 ,每个汉字32字节
; ADDR = (区码*94+位码+1)*32
; 在汉字的区位码中,高两位为区号,低两位为位号。
; 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。
; 其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),
; 56-87区为二级汉字(3008个汉字,按部首次序排列)。
; GB2312构成一个二维平面,分成94行和94列,行号成为区号,列号成为位号。
............................................................................*/
// ---- Variable 'HZ' assigned to Register 'R2/R3' ----
Show_HZK: ;计算汉字库在ROM中的位置
;-------------- (R2*94+R3+1)*32 -> P4:DPTR
MOV A , R3 ; (汉字内码 - 0A0A0H) = 区位码
DEC A , #0A0H
MOV R3 , A
MOV A , R2
DEC A , #0A0H
MOV B , #094
MUL AB ; 低位在A
INC R3 ; R3 最大为 94,不会越界
ADD A , R3
XCH A , B
ADDC A , #0 ; 高位在A 低位在 B
;-------------- 先乘16 , 相当于移位4 (R2 R3 A -> P4 DPH DPL)
MOV R2 , #000H
MOV R3 , #000H
SWAP A
MOV R2 , A
ANL A , #11110000B
MOV R3 , A
MOV A , R2
ANL A , #00001111B
MOV R2 , A
MOV A , B
SWAP A
MOV B , A
ANL A , #00001111B
ORL A , R3
MOV R3 , A
MOV A , B
ANL A , #11110000B
;-------------- 再乘2 , 相当于移位1 (R2 R3 A -> P4 DPH DPL)
CLR C
RLC A
MOV DPL , A
MOV A , R3
RLC A
MOV DPH , A
MOV A , R2
RLC A
ANL A , #00000111B
MOV P4 , A
RET
|
|