繁体   English   中英

错误:FASM x86组件中的值超出范围

[英]error: value out of range in FASM x86 assembly

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

mov eax,dword ptr "abcdlol$"

我想将"abcdlol"的地址放入eax寄存器,但看起来不是FASM复制到eax

用C代码编写的示例: int *p="lol";

如何解决这个问题? 这是组装商的限制吗?

它的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程序,请参阅FASM语法的示例。

仅在寻址存储器时才需要dword ptr等。 mov eax,abcdlol只是一个mov eax,immed32 处理器不必担心您要使用eax存储的值作为数字还是指针。

这应该工作:

mystring  db  "abcdlol", 0
mov eax,mystring

回归本源:

EAX只能存储4个字节。 “ abcdlol $”是8个字节。 因此,与其直接输入值,不如按照其他发布者的建议,将其地址放入EAX。 但是如果您坚持要使用两个寄存器:

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

或64位

mov rax,"abcdlol$"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM