错误:FASM x86程序集中的值超出范围

时间:2013-03-23 20:53:02

标签: assembly x86 fasm

为什么我在以下代码中获得error: value out of range.

mov eax,dword ptr "abcdlol$"

我想将"abcdlol"的地址放入eax注册,但看起来并不是FASM正在复制到eax的这个值。

C代码示例:int *p="lol";

如何解决这个问题?这是汇编程序的限制吗?

3 个答案:

答案 0 :(得分:4)

它应该是FASM语法:

mov eax,my_string
my_string db "abcdlol$"

您还可以使用lea

lea eax,[my_string]
my_string db "abcdlol$"

是否使用ASCIIZ字符串(以0结尾)或其他终结符取决于您将对字符串执行的操作。您似乎使用$作为字符串终止符,由DOS打印字符串函数使用。检查$是否是您要使用的OS API函数的正确字符串终止符(如果有)。例如,printf需要零终止(ASCIIZ)字符串。

请参阅FASM HelloWorld .exe program,查看FASM语法示例。

仅在寻址存储器时才需要

dword ptr等。 mov eax,abcdlol只是mov eax,immed32。处理器不会担心您是否要将eax中存储的值用作数字或指针。

答案 1 :(得分:1)

这应该有效:

mystring  db  "abcdlol", 0
mov eax,mystring

答案 2 :(得分:0)

回到基础:

EAX只能存储4个字节。 “abcdlol $”是8个字节。因此,不应直接放置值,而应按照其他海报的建议将其地址放入EAX中。但如果你坚持,请使用两个寄存器:

mov eax,"abcd" ;4 bytes
mov ebx,"lol$" ;4 bytes

或64位,

mov rax,"abcdlol$"

您应该告诉传递立即值和将地址传递给寄存器之间的区别。