You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MasmBasic文件加密汇编代码报错A2008:第15行逗号语法错误

MasmBasic文件加密代码编译报错A2008的解决方法

你的代码编译报错test.asm(15) : error A2008: syntax error : ,,主要是三个问题导致的:MasmBasic不存在ByteAt语法、操作数类型不匹配、xor指令不支持双内存操作数。以下是具体修正方案:

错误原因分析

  1. 无ByteAt宏:MasmBasic没有ByteAt(addr, index)这种用法,直接用key[索引]的内存寻址方式即可。
  2. keyLength定义错误:keyLength db 3,0定义了两个字节,且字节类型和32位寄存器ebx做模运算时会有类型冲突,改成编译期常量更合适。
  3. xor指令操作数非法:Masm不允许xor指令直接对两个内存地址进行运算,必须将其中一个操作数加载到寄存器后再执行运算。

修正后的完整代码

include \masm32\MasmBasic\MasmBasic.inc   
.data
    key db "AMU", 0
    keyLength equ 3  ; 改为编译期常量,避免类型不匹配问题

Init

Let esi = Input$("Enter the filename: ", "test.txt")  
Let edi = FileRead$(esi)   
Let eax = LastFileSize      
Let ebx = 0                 

For_ ebx = 0 To eax - 1
    ; 先将key对应位置的字节加载到al寄存器
    mov al, key[ebx % keyLength]
    ; 明确指定byte ptr,确保汇编器识别为字节操作
    xor byte ptr [edi + ebx], al
Next

; 生成加密后的文件名(若原文件名无点号,需额外处理,此处保留原逻辑)
Let esi = Left$(esi, Rinstr(esi, ".")) + "xyz"

; 写入加密后的文件
FileWrite esi, edi, LastFileSize   

EndOfCode

编译验证

使用原编译命令即可通过:

ml.exe /c /coff test.asm

之后可通过link工具链接生成可执行文件:

link /subsystem:console test.obj kernel32.lib user32.lib masm32.lib

内容的提问来源于stack exchange,提问作者exe apk world

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:00:57