附录 C 模拟器 MIPSsim 的汇编语言
1. 汇编程序语法结构
可先定义数据段,再定义代码段;或者直接定义代码段(数据段在程序最后定义)
代码段以“.text”开头,含有指令。
数据段以“.data”开头,含 byte,half,word,dword,single,double,space 等数据子节。
除 space 外,各类数据子节可含若干数据列表,其每个数据皆属于该类型。每个数据
间可用逗号隔开。
以类似正则表达式的方式表示:
(其中“*”表示 0 到多个匹配,“[ ]”表示将其中内容作为整体匹配,“|”表示“或”关系,“?”表
示 1 到多个匹配,“RT”表示换行符)
sparc_assemblly: [ text_sec | data_sec ]*
text_sec: ‘.text’ [ addr ]? RT [ text_line [ comment ]? RT ]*
text_line: instr | label | align | (blank)
data_sec: [ data_line [ comment ]? RT]*
data_line: ‘.data’ [ addr ]? RT [ sub_sec | align ]*
sub_sec: byte_sec | half_sec | word_sec | dword_sec | single_sec | double_sec |
ascii_sec | asciiz_sec | space_sec
word_sec: ‘.word’ word_list RT
word_list: word [‘,’ word ]*
(byte、half、dword、single、double、ascii、asciiz 子节与 word 子节类似)
space_sec: ‘.space’ number RT
align: ‘.align’ [ 0 | 1 | 2 | 3 ]
2.详细说明
(1) 指令段:含有指令,‘.text’后若指定了地址,则该地址表示该段起始地址。
(2) 数据段:含有数据,‘.data’后若指定了数字,则该地址表示该段起始地址。
(3) 标签:本身代表一个地址,即其所在处。
(4) 对齐(align):指示接下来的单元如何对齐,设所指定的数字为 n,则在 2
n
边
界处对齐。
(5) 数据列表:逗号隔开的每个数据依次写入地址空间,每个数据在写入前都要对齐。
(6) 换行(RT):即回车。
(7) 注释(comment):以 “#”开头,以换行(RT)结束。
(8) 标签(label):一个标示符加一个冒号;标示符以字母或下划线开头,接着若干
字母、数字或下划线。
(9) 指令(instr):即指令列表的汇编语句列中所列的语句。
在汇编语句中,各词法要素实际写法如下: