Assembly 在程序集中定义数据
我有一个简单的程序,它向shell返回一个值:Assembly 在程序集中定义数据,assembly,Assembly,我有一个简单的程序,它向shell返回一个值: SECTION .data value EQU 10 SECTION .text global main main: mov eax, value ret 这工作正常(当我运行echo$?时显示10)。但我真正想做的是将第二行替换为: value DD 10 我想这应该行得通,但不行吗?它给了我一个无意义的返回值。我假设您使用的是NASM。因此,如果您已将value声明为value DD 10,则应使用: mo
SECTION .data
value EQU 10
SECTION .text
global main
main:
mov eax, value
ret
这工作正常(当我运行echo$?
时显示10)。但我真正想做的是将第二行替换为:
value DD 10
我想这应该行得通,但不行吗?它给了我一个无意义的返回值。我假设您使用的是NASM。因此,如果您已将
value
声明为value DD 10
,则应使用:
mov eax,[value]
获取值的值
(即10)。指令mov eax,value
将为您提供value
的地址
根据所使用的汇编程序,语法略有不同。在MASM/TASM语法
mov eax中,value
和mov eax,[value]
的意思是相同的(它们都得到value
的值)。这很奇怪。为什么它们的意思是一样的?谁知道呢。也许他们认为程序员不必使用括号会更容易。当然,在许多情况下您仍然需要它们(例如,mov-ebx,[esi]
)。