振我汉纲

振我汉纲——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编译链接,命名时请仍沿用下划线 或英文字母开头)。

  高版本的汉化,请关注下期。

  竹闲谨以本文作中文编程大军的马前小卒;为往後绽放的牡丹 献上绿叶的扶持。

评论

此博客中的热门博文

我的开源软件项目(不定期更新)

zarak_04

zarak_11