一、汇编语言源程序三类语句
1、指令语句(机器指令语句)
汇编后会产生相应的代码,能被CPU直接识别并执行相应操作。
基本指令:ADD、SUB和AND等。
2、伪指令语句
该语句汇编后不产生机器代码,其所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。
3、宏指令语句
在汇编语言中,还允许用户将多次重复使用的源程序定义为宏,每个宏都有相应的宏名。只要在相应位置使用宏名,即相当于使用了这段程序。
二、汇编程序
功能:将汇编语言编写的源程序翻译成机器指令程序。
由于汇编指令中形成操作数和操作地址的部分可能出现后面才会定义的符号,所以汇编程序一般要两次扫描源程序才能完成翻译过程。
第一次扫描:
主要工作:定义符号的值并创建符号表ST。ST用来记录汇编时所遇到的符号的值。
另外,有一个固定的机器指令表MOT1,其中记录了每条机器指令的记忆码和指令长度。
在汇编程序翻译源程序的过程中,为了计算各汇编语句标号的地址,需要设立一个位置计数器或单元地址计数器LC,其初值一般为0。
第一次扫描过程:
(1)单元计数器LC置初值为0。
(2)打开源程序文件。
(3)从源程序中读入第一条语句。
(4)while(若当前语句不是END语句){
if(当前语句有标号) 则将标号和单元计数器LC的当前值填入符号表ST;
if(当前语句是可执行的汇编指令语句) 则查找MOT1表获得当前指令长度K,并将LC = LC + K;
if(当前指令是伪指令) 则查找POT1表并调用相应的子程序;
if(当前指令的操作码是非法记忆码) 则调用处错处理子程序;
从源程序中读入下一条语句;
}
(5)关闭源程序文件
第二次扫描
任务:产生目标程序。
除了使用第一次扫描产生的符号表ST外,还需要使用机器指令表MOT2。
此外,还需要设立伪指令表POT2。
本次扫描中,可执行汇编语句被翻译成对应的二进制代码机器指令:
一、把机器指令助记符转换成二进制机器指令操作码,可通过查找MOT2实现
二、求出操作数区各操作数的值。
三、汇编原理
1、编译过程六大阶段
词法分析 => 语法分析 => 语义分析 => 中间代码生成 => 代码优化 => 目标代码生成
其中,符号表管理和出错处理贯穿六大阶段。
出错处理:发现语法错误、静态语义错误。
语法错误如:单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等。
静态语义错误:语义分析时发现的运算符与运算对象类型不合法等。
1.1、词法分析:
任务:对源程序从前到后逐个字符扫描,从中识别出一个个“单词”符号。
“单词”符号是程序设计语言的基本语法单位,如关键字、标识符、常数、运算符、分隔符等。
1.2、语法分析
任务:根据语言的语法规则将单词符号序列分解成各类语法单位,如:表达式、语句、程序等。(确定整个输入串是否构成一个语法上正确的程序。)
· 语法规则:各类语法单位构成的规则。
1.3、语义分析
任务:分析语法结构的含义,检查源程序是否包含静态语法错误,并收集类型信息供后面的代码生成阶段使用。(即类型分析和检查。)
1.4、中间代码生成
任务:根据语义分析的输出生成中间代码。
中间代码:一种简单且含义明确的记号系统。
1.5、代码优化
原因:中间代码生成工作时机械的、按固定模式进行的,因此,其时间上和空间上有较大的浪费。
当需要生成高效的目标代码时需要进行优化。
1.6、目标代码生成
编译工作的最后一个阶段。