【发布时间】:2015-09-10 18:31:16
【问题描述】:
我正在学习汇编语言 (x86),我需要弄清楚如何仅使用变量而不是中间值来使寄存器溢出。
我通过将 FFFF 放入变量中来溢出 AX 寄存器,将该变量移动到 AX,然后递增 AX。但是,我遇到了问题。首先,我去声明一个WORD 变量,如下所示:
limitReg WORD 0
然后在.code我这样做:
MOV limitReg, FFFFh
MOV ax, limitReg
但是,我收到以下错误:
Error 1 error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\pa2.obj" /Fl"PA2.lst" /I "C:\Irvine" /W3 /errorReport:prompt /Ta..\..\..\..\..\..\..\Irvine\Examples\ch03\pa2.asm" exited with code 1. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\masm.targets 50
有人可以帮我学习这个吗?
【问题讨论】:
-
控制台中没有更多的错误信息吗?一些指向无法汇编的实际代码行。
-
@Michael Nope。我得到的唯一消息是声明的消息。
-
在 masm 中,您从像
mov ax, [limitReg]这样的内存加载,它从 地址加载 - 而不是仅仅加载地址本身。此外,您的第一条指令根本不存在。你不能在不涉及寄存器的情况下移动值。 -
汇编器应该已经生成了一个文件
PA2.lst(考虑到命令行选项/F1)。请查看该文件的内容;它应该提供有关装配过程中出现问题的完整详细信息。 -
@BoPersson
mov ax, [limitReg]是 NASM 语法(或理想模式下的 TASM); MASM 不接受括号。而MOV memory,immediate从最初的 8086 开始就一直是有效的指令。如果我错了,请纠正我。
标签: visual-studio-2012 assembly x86 overflow masm