有人把汇编器那种"敲一条指令、立刻看到它变成哪几个字节"的手感,搬到了WebAssembly上。项目叫HEXAW,作者自述是"一个实验性的WASM文本格式",主打可读的助记符和复古汇编器的味道。
起因很具体:他曾在Videoton TV Computer上写过Z80游戏,至今怀念输入一条指令就能看到它变成确切字节的过程。WebAssembly让这种可能性回来了,但WAT给他的是"括号丛林",他想要的是汇编器清单。HEXAW就是从这个落差里长出来的。
作者明确标注:项目仍是彻底的beta,语法和工具链都在演进,粗糙边缘可以预期。命令行工具能把HEXAW汇编成.wasm,也能把二进制反 dump 回可读指令,还支持在代码里向前、向后单步执行。
演示路径写得很直白:克隆仓库,跑npm ci,把示例存成仓库目录下的factorial.hexaw,然后执行npm run shell -- factorial.hexaw。进入shell后依次输入CALL factorial 5、G、BACK,先算出5! = 120,再回退最后一步执行。
shell里还有一个受SST启发的A模式:输入一条指令、回车,看到它的十六进制字节,然后从下一个地址继续。直接空回车,则应用已完成的草稿。
阶乘循环的代码里能看到这套语法的骨架:EXP声明"factorial"、FN 0、PAR 0标注参数n、RES、LOC 1标注结果,随后CONST 1、SET 1初始化,BLOCK与LOOP包住主体,GET 0、EQZ、BRIF 1在n等于0时跳出外层块,GET 1、GET 0、MUL、SET 1完成累乘,GET 0、CONST 1、SUB、SET 0递减,BR 0回到循环开头。
默认数值类型是i32,前缀L、F、D分别选择i64、f32、f64。作者强调这仍然是WASM:类型化栈、局部变量、结构化控制流,一样不少。dump输出会把字节摆在指令旁边,例如00000032 : 20 00 : GET 0、00000034 : 45 : EQZ、00000035 : 0D 01 : BRIF 1。
工具链方面,他用Codex构建,命令行基于自己的TS+|> TypeScript分支,配一个共享的汇编/调试引擎。内置的AI导师走Groq上的开放权重模型gpt-oss-120b,沿用自他此前的Terminal Is Your Friend项目;教学内容聚焦HEXAW和WASM,以真实操作码表为 grounding,并附带当前代码、汇编草稿、VM状态和近期错误的有限快照。
启动shell前设置GROQ_API_KEY,就能在注释里提问,比如"BRIF 1在这里是什么意思?"。回复到达时他可以继续手头的工作;建议的代码始终只是示例,要他自己输入才生效。
开放创新为什么重要,他的回答是:语言、编译器分支、导师的教学材料他都能改,别人也一样,因为HEXAW采用MIT许可。开放权重模型留了一条未来自托管的路线;眼下导师用Groq的托管API,汇编器和调试器则在本地运行。
至于"偷懒的回报",他列得很实在:更少的手工字节解码,更少的在代码、文档和另一个AI聊天窗口之间来回切换。用他的话说,自己懒到想把这些全塞进一个终端,但还没懒到放下汇编不管。
热门跟贴