我一直在尝试掌握如何在汇编中进行一些简单的编程。我正在查看一个教程 hello world 程序,他们解释的大部分内容都是有道理的,但他们真的在掩饰它。我需要一些帮助来理解程序的某些不同部分。这是他们的教程示例-
section .text
global main ;must be declared for linker (ld)
main: ;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
有文本部分和数据部分。数据部分似乎保存了我们为程序定义的信息。看起来程序的“框架”在文本部分,“肉”在数据部分......?我假设程序在编译时执行文本部分,并将数据部分中的数据填充到文本部分?bss/text/data 部分的交互对我来说有点陌生。同样在数据部分中 msg 和 len.... 变量?提到了,它们后面跟着一些我不知道该怎么做的信息。msg后面跟着db,这是什么意思?然后是文本,然后是 0xa,0xa 是干什么用的?len 后面也跟着 equ,这是否意味着等于?len 等于dollarsign 减去msg 变量?美元符号是什么?某种运算符?还有文本部分中的说明,mov ebx,1 显然,或者似乎告诉程序使用STDOUT?将 1 移到 ebx 寄存器是设置标准输出的标准指令吗?
也许有人有更详尽的教程可以推荐?我想弄脏组装,如果你愿意的话,我需要自学一些……“核心基础”。感谢所有的帮助!