跳转到内容

认识汇编 - 段

回顾上篇的代码

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

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

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

事先存放定义好的内容到记忆体中,以 变量: 格式 内容 hello: db "hello" 的方式定义
资料格式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

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

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

也称为文字段,用来放我们写的代码,汇编后的机器码就在这边 label: 用于标记区块,实际上是将该区块的第一行位址记录在符号表,常用于跳转