Nasm 源代码解析 预处理器
预处理器是
Nasm
的第一个模块,从现在开始我们将会进入
Nasm
的核心代码进行分
析。
功能:处理宏定义,伪指令
数据结构:
Preprocessor 预处理器的数据结构关系:
功能模块
1. 内存块操作
数据结构和算法:
数据结构是链表:
当插入一个 block 的时候,将该块插入到链表的结尾(思考:是否可以考虑插入到链表
头呢?这样貌似对程序没有影响啊,而且大大提高了效率。)
删除 block 链表:由于头指针的静态变量,不能删除
!"#$"$%
"#%
&!'&(
)'
(("&)
!"#$"$%
*
+ '&
个人观点:可以建立一个指向链表结尾的指针,这样就无需循环获取放在链表尾部的指针了,可
以大大提高效率
!#,-%
,-
!.
,-"#$%
!!&.
,-"#$&#%%
$&!
,-,-
,-,-
,-
&'&(
"#%
*
+ (
(( !/
&)
!#%
&#,-%
"&#,-%
,-
�*%
"&#%
2. Token 存储功能操作
Token 功能是以以上的块操作为基础开发出来的:
数据结构:链表
1+234"25367849:;<
&空闲的 链表头
6=&23"6=>5"4?
(
23"@A746B>54C 23"52==4 23"7? 23"BD4BD25"7? 23"6D7E
23"=4D 23"6=>5"4? 23"2A4D 23"6=>5"B>D>=
23"74D>"6D7E
&!
)7(
)
!"# ( %
先获取一个大块,然后在这个大块内存中建立一个链表,&指向空闲链表的头指针
&#&%
&#%!"#234"2536784$&#%%
&#:F234"2536784,CGG%
&HI)*&HGCI
- 1
- 2
- 3
前往页