variables - 变量定义如何在汇编中工作?

标签 variables assembly static nasm

汇编中流行的 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 - 对吗?

最佳答案

是的,确实如此!它定义了任意数量的字节,完全包含您提供的内容。


汇编程序中通常使用三个部分。 .text.data.bss.text 部分用于代码,可以从中读取或执行,但不能写入。 .data 用于您的初始化(如 C 中的 int a = 56)变量。它是读写的,但没有执行。 .bss 用于未初始化(如 C 中的 int a)变量,可以在运行时更改,并且是零初始化的(而不是用特定值初始化)。它具有与 .data 相同的权限。

.data 部分适用于 Hello World,但更喜欢使用 .rodata(windows 是 .rdata,谢谢评论),因为它是只读的。

关于variables - 变量定义如何在汇编中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36601511/

相关文章:

javascript - 变量自行改变

C++ vector 、const char *、变量作用域和生命周期

gcc - Asm 代码说明

c - 我的 C 函数的汇编代码

c++ - C++查询类的静态成员变量

java - 单例和静态方法Java之间的混淆

c# - 为什么静态类不能有析构函数?

math - ARM 汇编浮点变量

javascript - 在 Javascript 函数中获取可变数量的参数

linux - 在 ELF 中交换部分