巍巍汉邦
巍巍汉邦——tasm汉化浅析之三
镜像:https://leisurebamboo.wordpress.com/2022/12/01/tasm3
原文在2005-3-20 发表于 http://www.aogosoft.com/bbs/view.asp?id=37769 ,现有增删。
"汉化"(Sinicization)暂定义为“函数名、变量名、宏名 能用汉字”。
Turbo Assembler 3.0 版,长度为 11'5471字节。(这个简直满大街都有,不可能找不着的)
其编译程序为:
cs:281B 8B360E57 MOV SI,[570E]
cs:281F AC LODSB
cs:2820 32E4 XOR AH,AH
cs:2822 8BD8 MOV BX,AX
cs:2824 D1E3 SHL BX,1
cs:2826 FFA7D607 JMP [BX+07D6]
其中[570E]为asm的buff指针;
ds:07D6 起为100h个函数指针表,为
dw 21h dup(281Fh) ; ascii00~20
dw 2838h,28D4h, 2838h ; !"#
dw 3 dup(2DFAh),28D4h ; $%&'
dw 6 dup(2838h) ; ()*+,-
dw 285Dh,2838h ; ./
dw 0Ah dup(28FBh) ; '0'~'9'
dw 2838h, 282Ah ; ":;"
dw 3 dup(2838h) ; "<=>"
dw 2 dup(2DFAh) ; "?@"
dw 2A7Ch,2ADFh, 2B43h ; "ABC"
dw 2BD0h,2C9Fh ; "DE"
dw 4 dup(2DFAh),2CC5h ; "FGHI",'J'
dw 2 dup(2DFAh),2CF5h ; "KL",'M'
dw 2 dup(2DFAh),2D2Bh ; "NO",'P'
dw 2 dup(2DFAh),2D8Fh ; "QR",'S'
dw 7 dup(2DFAh) ; "TUVWXYZ"
dw 2838h,284Ah, 2838h ; "[\]"
dw 2838h,2DFAh, 2838h ; "^_`"
dw 2A75h,2AD8h, 2B3Ch ; "abc"
dw 2BC9h,2C98h ; "de"
dw 4 dup(2DFAh),2CBEh ; "fghi",'j'
dw 2 dup(2DFAh),2CEEh ; "kl",'m'
dw 2 dup(2DFAh),2D24h ; "no",'p'
dw 2 dup(2DFAh),2D88h ; "qr",'s'
dw 7 dup(2DFAh) ; "tuvwxyz"
dw 5 dup(2838h) ; "{|}~"
dw 128 dup(281Fh) ; ascii80~FF
前33个与後128个ascii函数指针都指向281F,恰好落在上文编译程序内,紧凑得无法改写,(borland不愧是borland),祗能将後128个ascii函数指针改为下文“常见的”2DFAh。52个英文字母里大部分由该函数处理:
cs:2DFA 06 PUSH ES
cs:2DFB 32E4 XOR AH,AH
cs:2DFD 4E DEC SI
cs:2DFE BB2F41 MOV BX,412F
cs:2E01 D7 XLAT
cs:2E02 16 PUSH SS
cs:2E03 07 POP ES
cs:2E04 BF0C47 MOV DI,470C
ds:412F 起为100h个ascii码对应属性表,与前贴tasm 2.01版一致,将後半部分换成128个80h即可。
汉化方法(很长,文房四宝伺候!):
1."函数指针表"位处该exe的第[188B6h~18AB5]字节,需将後128字(该exe的第[189B6h~18AB5]字节)从281Fh 改为 2DFAh。
各位手上的tasm 3.0版,未必与拙文一致,但那"函数指针表"(有128个"281F"),很易找出。将後半部分换成128个2DFA即可。
(废话两句:按字节处理时,intel采取低字节居前格式,查找字节则变为查找"1F,28",替换字节则变为替换"FA,2D"。)
2."ascii码对应属性表"位处该exe的第[1C20Fh~1C30E]字节,恰在该exe末端,将後半部分(该exe的第[1C28Fh~1C30E]字节)换成128个80h即可。
各位手上的tasm 3.0 版,未必与拙文一致,找出那"ascii码对应属性表"(有128个02,很易找出),将後半部分换成128个80h即可。
汉化完毕。函数名、变量名、宏名 均能用汉字,但为便于日後tc编译链接,命名时请仍沿用 下划线 或英文字母开头。
---------------------------------------
我觉得挺奇怪,坛子里该有一大批学生的,咋没人对“中文编程”表示感兴趣呢?
但我念书那阵子,初始化函数名真的就叫"chu_shi_hua",那会儿不晓得init咋写。纯英文程序(包括注释)是熬成老油条之後的事儿了。
(竹闲的险恶用心如下:颠覆现在程序员的编程语言习惯不大可能了,祗能抓好对下一代的毒害工作,让他们知道程序不必要纯用英语,为未来的中文编程大军拉壮丁……)
大伙儿看完,帮忙给点意见,砸两板砖也行。让竹闲知道,这几百字还敲的值。
啊……你还真砸啊!……
(捂着额头)下回我不说汉化tasm,改说汉化Turbo C 不就行了呗?
评论
发表评论