【发布时间】:2015-12-03 04:04:38
【问题描述】:
当我尝试使用 masm32 组装它时,我在使用 32 位寄存器名称的每一行(以 MOV EAX, 05h 开头)(第 3、5、8、9、10 行)收到“符号未定义”错误, 11, 12)。为什么是这样?我用来组装它的命令是ml.exe /Zm /Bl link.exe filepath\filename
如果我删除/Zmswitch,我仍然会在同一行收到错误,只是在这种情况下,它是"Instruction or register not accepted in current CPU-mode"
完整完整的代码:
code SEGMENT
MOV AX, 05h ;MOV B8+
MOV EAX, 05h
MOV BX, 06h
MOV EBX, 06h
MOV CX, 07h
MOV DX, 08h
MOV CR0, EAX ; 0F 22 /r
MOV CR0, EBX
MOV CR0, ECX
MOV CR0, EDX
MOV CR0, ESP
code ENDS
END
注意:代码的目的是查看不同指令被翻译成什么操作码。
【问题讨论】:
-
也许你告诉它是 8086 指令。如果在代码顶部使用
.686指令会发生什么? -
如果你展示了你的整个汇编文件,它可能会给我们更多的帮助。
-
还有一点很难说是你是否应该使用
/Zm选项,它可以让你与旧版本的 MASM 兼容。你使用/Zm是有原因的吗? -
我拿了你的代码,使用了 MASM32,用 /Zm 编译它并且在所有 32 位寄存器上都出错了。当我将
.686添加到文件顶部时,这些错误消失了。