NASM源代码分析之预处理(1)

阅读: 评论:0

NASM源代码分析之预处理(1)
陈剖建NASM源代码分析之预处理(1)交博汇
NASM源代码的整体框架,互联⽹上已经有资料介绍了,具体的⼤家可以参见《NASM源码阅读笔记》⼀⽂。
NASM编译源代码的时候,分为三种情况,分别是:
(1):只产⽣⽂件依赖关系(operating_mode = op_depend);雨鸟喷头
(2):只进⾏预处理(operating_mode = op_preprocess);
(3):预处理并⽣成⽬标代码(operating_mode = op_normal)。
第⼀种情况⽐较简单,代码量也⽐较少,很容易就看明⽩。第⼆种情况⽐第⼀种要难很多,⽽且涉及的数据结构也很多,刚开始看的时候很容易就看晕了。所以本⼈根据近段时间以来看代码的体会,总结了下⾯的内容,希望能给那些看NASM代码的朋友⼀些帮助。这也是我第⼀次⽤这种⽅式写下我的总结,肯定有不全,甚⾄时错误的地⽅,欢迎⼤家批评指正。我的QQ:79943558。
preprocess.c是处理预处理的最主要的⽂件,⾥⾯包括了⼏乎全部关于预处理的内容。其中最基本的结构是Token结构,代码如下:struct Token
{
Token *next;
char *text;                    // 代表的Token内容,如"if","("
SMacro *mac;                  // 当指向的类型为TOK_SMAC_END有效
int type;                        // Token类型
};
Token在《编译原理》(龙书中⽂版P18-第8⾏)中的定义是:在⼀个产⽣式中,像if和括号这样的词法元素称为记号(token)。
在NASM中,token指代的就是源程序中最⼩的元素。
其中,type的类型包括有:
enum
{
TOK_WHITESPACE = 1,    // 空格
TOK_COMMENT,              // 注释
TOK_ID,                            // 变量名,如语句:count dd 0x13, count即为TOK_ID
TOK_PREPROC_ID,          // 预处理名,以形如 %1或% 1或%{...},
TOK_STRING,                    // 以单引号('')或双引号("")包括的字符(串)
TOK_NUMBER,                  // 数字
TOK_SMAC_END,              // 单⾏宏结束
TOK_OTHER,                    //  >>, <<, >=, %%, &&, !=,<>或逗号,句号等
TOK_SMAC_PARAM,          // 宏参数
贝克曼梁TOK_INTERNAL_STRING  // 于TOK_STRING类似,只是没有引号
};pdh
当NASM对源⽂件进⾏预处理时,先将之Token化,Token化函数为preprocess.c/tokenise(char *line)。
例如语句:inc      al;
经过tokenise处理之后分为四个token元素,分别为: 1 inc, 2 空格,3 al, 4; 。
持续更新中......三苯基氢氧化锡

本文发布于:2023-08-16 06:06:16,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/365923.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:源代码   预处理   内容   总结   时候
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图