03 2014 档案

摘要:ARM的常数表达式 如果说Intel指令中的立即数,相信大家都很熟悉。类似的,Arm指令中的“立即数”就是常数表达式。之所以称为常数表达式,而不称为立即数是有原因的。 Intel指令属于CISC指令集,指令是不定长的,因此可以将任意32位立即数编码到指令内。 Arm指令属于RISC指令集,指令是定长的32字节。众所周知,指令中操作码是必须的字段,如果把32位立即数直接编码到指令内部,操作码就无“容身之地”了…… 因此,Arm指令中“立即数”的位数必小于32位。那么如何在Arm指令中正常表示立即数呢?我们看看Arm的通用指令格式。 Arm指令中,操作码(opcode)、... 阅读全文
posted @ 2014-03-03 20:18 Florian 阅读(3921) 评论(0) 推荐(0) 编辑
摘要:扫描器的高效实现 编译器进行词法分析时,不可避免地需要对源文件进行扫描,实现该功能的模块称为扫描器。扫描器读取源文件,按序返回文件内的字符,直到文件结束。 扫描器的功能 实现文件的读一般使用库函数fscanf或者fread,那么按照怎样的读取方式才能让扫描器的性能更佳呢? (1)使用fscanf逐字扫描,并返回。 char scan(FILE*file){ char ch; if(fscanf(file,"%c",&ch)==EOF){ ch=-1; } return ch; } 这是最简单的实现方式,缺点是每次读取字符时都需要访问文件进行I... 阅读全文
posted @ 2014-03-02 22:45 Florian 阅读(1731) 评论(0) 推荐(0) 编辑