振我汉纲
振我汉纲——tasm汉化浅析
镜像:https://leisurebamboo.wordpress.com/2022/12/01/tasm1
原文在2005-2-27 发表于 http://www.aogosoft.com/bbs/view.asp?id=37168 ,现有增删。
"汉化"(Sinicization)暂定义为“函数名、变量名、宏名 能用汉字”。
aogo作的是masm预处理的汉化工作。
网上对“中文编程”向来都是臧否不一,有嘲讽的、有吹捧的、有不屑的、有沉思的、有望而却步的。在负面评价为主的氛围之下,aogo还是毅然冲了上去。
汉化的苦哇!殚思髮白、寒夜孤灯。
这正是鲁迅所云“寂寞的猛士”一流人物。而鼠辈是如何报答这样的猛士的呢?黑了他的网站。
无语……
跑题了,不好意思,但不骂真的就不解气。希望此文能稍慰aogo其寂寞于一二。
同时,老大的闭关仍未暇 将大作杀青,而各位却盼得早已望穿秋水,希望此文能聊解大家的相思,收望梅止渴之效。
既是浅析,便从低开始:在网上搜索"tasm 1.0",容易觅得 vetusWare.com 或 winWorldPc.com 内的 tasm 1.0版本……(众人怒道:"别卖广告!"),长度祗9'7876字节。反汇编其code段,知它扫描asm文件时
cs:2FD1 BB3D2D MOV BX,2D3D
cs:2FD4 8BFE MOV DI,SI
cs:2FD6 8B36C21F MOV SI,[1FC2]
cs:2FDA AC LODSB
cs:2FDB D7 XLAT
cs:2FDC A803 TEST AL,03
cs:2FDE 7413 JZ 2FF3
cs:2FE0 A801 TEST AL,01
cs:2FE2 74F6 JZ 2FDA
...
其中[1FC2]为asm的buff;ds:2D3D 起为100h个ascii码对应属性表,为
02 02 02 02-02 02 02 02; ascii00~07
02 02 02 02-02 01 02 02; ascii08~0F
02 02 02 02-02 02 02 02; ascii10~17
02 02 02 02-02 02 02 02; ascii18~1F
02 08 40 08-80h 80h 08 40; ascii20~27
08 06 dup(08) 04 ; ascii28~2F
0Ah dup(10h) ; '0'~'9'
08 01-08 08 08 80h; ascii3A~3F
80h 1Ah dup(80h) ; '@','A'~'Z'
08-08 08 08 80h; ascii5B~5F
08 1Ah dup(A0h) ; '`','a'~'z'
08-08 08 08 08 ; ascii7B~7F
80h dup(02h) ; ascii80~FF
考虑到GB字符的区位均在ascii80h以上,将其属性往'A'~'Z'的属性靠拢,即将ascii80~FF的对应部分(即tasm.exe的第37Bdh~第383ch字节)换为80h dup(80h)便可实现tasm 1.0的汉化。
("汉化"暂定义为"函数名、变量名、宏名能用汉字",但为便于日後tc编译链接,命名时请仍沿用下划线 或英文字母开头)。
高版本的汉化,请关注下期。
竹闲谨以本文作中文编程大军的马前小卒;为往後绽放的牡丹 献上绿叶的扶持。
评论
发表评论