C指针原理(14)-C指针基础

发布时间:2014-10-23 23:29:11
来源:分享查询网

tcc源码分析 本博客所有内容是原创,如果转载请注明来源 http://blog.csdn.net/myhaspl/ tcctok.h定义了C语言的词法分析的基本元素,主要定义了关键字。 /* keywords */      DEF(TOK_INT, "int")      DEF(TOK_VOID, "void")      DEF(TOK_CHAR, "char")      DEF(TOK_IF, "if")      DEF(TOK_ELSE, "else")      DEF(TOK_WHILE, "while")      DEF(TOK_BREAK, "break")      DEF(TOK_RETURN, "return")      DEF(TOK_FOR, "for")      DEF(TOK_EXTERN, "extern")      DEF(TOK_STATIC, "static")      DEF(TOK_UNSIGNED, "unsigned")      DEF(TOK_GOTO, "goto")      DEF(TOK_DO, "do")      DEF(TOK_CONTINUE, "continue")      DEF(TOK_SWITCH, "switch")      DEF(TOK_CASE, "case") .............................. .............................. .............................. 同时定义了条件编译的相关内容 /*********************************************************************/ /* the following are not keywords. They are included to ease parsing */ /* preprocessor only */      DEF(TOK_DEFINE, "define")      DEF(TOK_INCLUDE, "include")      DEF(TOK_INCLUDE_NEXT, "include_next")      DEF(TOK_IFDEF, "ifdef")      DEF(TOK_IFNDEF, "ifndef")      DEF(TOK_ELIF, "elif")      DEF(TOK_ENDIF, "endif")      DEF(TOK_DEFINED, "defined") 在i386-tok.h中定义了汇编的相关关键词 /* ------------------------------------------------------------------ */ /* WARNING: relative order of tokens is important. */ /* register */  DEF_ASM(al)  DEF_ASM(cl)  DEF_ASM(dl)  DEF_ASM(bl)  DEF_ASM(ah)  DEF_ASM(ch)  DEF_ASM(dh)  DEF_ASM(bh)  DEF_ASM(ax)  DEF_ASM(cx)  DEF_ASM(dx)  DEF_ASM(bx)  DEF_ASM(sp)  DEF_ASM(bp)  DEF_ASM(si)  DEF_ASM(di)  DEF_ASM(eax)  DEF_ASM(ecx)  DEF_ASM(edx)  DEF_ASM(ebx)  DEF_ASM(esp)  DEF_ASM(ebp)  DEF_ASM(esi)  DEF_ASM(edi) #ifdef TCC_TARGET_X86_64  DEF_ASM(rax)  DEF_ASM(rcx)  DEF_ASM(rdx) ........................... ............................ 在x86_64-asm.h中定义了64位汇编相关关键字      DEF_ASM_OP0(clc, 0xf8) /* must be first OP0 */      DEF_ASM_OP0(cld, 0xfc)      DEF_ASM_OP0(cli, 0xfa)      DEF_ASM_OP0(clts, 0x0f06)      DEF_ASM_OP0(cmc, 0xf5)      DEF_ASM_OP0(lahf, 0x9f)      DEF_ASM_OP0(sahf, 0x9e)      DEF_ASM_OP0(pushfl, 0x9c)      DEF_ASM_OP0(popfl, 0x9d)      DEF_ASM_OP0(pushf, 0x9c)      DEF_ASM_OP0(popf, 0x9d)      DEF_ASM_OP0(stc, 0xf9)      DEF_ASM_OP0(std, 0xfd)      DEF_ASM_OP0(sti, 0xfb)      DEF_ASM_OP0(aaa, 0x37) 先从几个重要文件入手。 libtcc.c /*  *  TCC - Tiny C Compiler  *   *  Copyright (c) 2001-2004 Fabrice Bellard  *  * This library is free software; you can redistribute it and/or  * modify it under the terms of the GNU Lesser General Public  * License as published by the Free Software Foundation; either  * version 2 of the License, or (at your option) any later version.  *  * This library is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  * Lesser General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public  * License along with this library; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */ #include "tcc.h" /********************************************************/ /* global variables */ 使用GCC扩展还是TCC扩展 /* use GNU C extensions */ ST_DATA int gnu_ext = 1; /* use TinyCC extensions */ ST_DATA int tcc_ext = 1; ST_DATA 结构标注TCC状态。 /* XXX: get rid of this ASAP */ ST_DATA struct TCCState *tcc_state; /********************************************************/ 根据标志包含一些相应TCC文件。 #ifdef ONE_SOURCE #include "tccpp.c" #include "tccgen.c" #include "tccelf.c" #include "tccrun.c" #ifdef TCC_TARGET_I386 #include "i386-gen.c" #endif #ifdef TCC_TARGET_ARM #include "arm-gen.c" #endif #ifdef TCC_TARGET_C67 #include "c67-gen.c" #endif #ifdef TCC_TARGET_X86_64 #include "x86_64-gen.c" #endif #ifdef CONFIG_TCC_ASM #include "tccasm.c" #if defined TCC_TARGET_I386 || defined TCC_TARGET_X86_64 #include "i386-asm.c" #endif #endif #ifdef TCC_TARGET_COFF #include "tcccoff.c" #endif #ifdef TCC_TARGET_PE #include "tccpe.c" #endif #endif /* ONE_SOURCE */ CONFIG_TCC_ASM打开内联汇编的开关 /********************************************************/ #ifndef CONFIG_TCC_ASM ST_FUNC void asm_instr(void) {     tcc_error("inline asm() not supported"); } ST_FUNC void asm_global_instr(void) {     tcc_error("inline asm() not supported"); } #endif

返回顶部
查看电脑版