跳转到内容

认识汇编 - 段

回顾上篇的代码

section .data
hello: db "Hello World!",10
section .text
_start:
mov rax, 1
; ......

一个程序的内容有资料有代码等等,为了将这些内容划分出来,于是有了不同的段
段的使用方式是section 段名,宣告后的底下内容全都适用于该段,直到宣告不同的段

以下列举一些开发过程常用的段

.data 数据段

事先存放定义好的内容到记忆体中,以变量名: 格式 内容的方式定义
资料格式d开头加上单位首字,以下是整个开发过程常用的单位

byte: 1 byte = 8 bits
word: 2 bytes = 16 bits
dword: 4 bytes = 32 bits
qword: 8 bytes = 64 bits

字符编码默认依照原文件的编码,所以支援utf-8,而ascii和utf-8的0~127是相同的
上面的hello会被当成

H e l l o w o r l d ! \n
72 101 108 108 111 32 87 111 114 108 100 33 10

.rodata 只读数据段

.data的read only版本,当数据用途只有读取而不写入时使用,比如这个hello

.bss 段

未定义内容的资料,预先设定一块会用到的空间,可读可写
变量名: 格式 数量的方式定义,格式是res加上单位首字
例如:data: resq 2 定义8x2 bytes的资料大小

.text 代码段

也称为文字段,用来放我们写的代码,汇编后的机器码就在这边