程序集中流行的hello world程序在.data部分中定义了字符串“Hello,world!”。根据本教程(http://www.tutorialspoint.com/assembly_programming/assembly_variables.htm),db定义了一个字节(在内存中分配一个字节)。
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our dear string
len equ $ - msg ;length of our dear string
这是否意味着将为每个字符分配一个字节?如果这是正确的,那么这一行将分配14个字节(13个字节用于“Hello,world!”和一个字节用于0xa - 对吗?
感谢您的帮助。
答案 0 :(得分:2)
在汇编程序中通常使用三个部分。 .text
,.data
和.bss
。 .text
部分用于代码,可以从中读取或执行,但不能编写。 .data
用于您的已初始化(如C语言中的int a = 56
)变量。它是读写的,但不执行。 .bss
用于未初始化(如C中的int a
)变量,可以在运行时进行更改,并且初始化为零(而不是使用特定值初始化)。它具有与.data
相同的权限。
.data
部分适用于Hello World,但更喜欢使用.rodata
(Windows为.rdata
,感谢评论),因为它是只读的。