📄 1.4.0c.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>
<BODY>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='1.4.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='1.4.1.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p><font class="emphasize">汇编器</font> </p>
<p>有些编译器产生汇编代码,汇编代码交给汇编器作进一步处理。其它的编译器完成汇编器的工作,产生可以重定位的机器码,直接传给装配器或连接编译器。</p>
<p>汇编器的最简单形式采用对输入进行两遍扫描。在第一遍,表示存储单元的所有标识符被找出并存入符号表,标识符的存储单元的确定是在它们的第一次被遇到时,例如下面的程序
<table align=center width=350>
<tr><td>MOV a, R1</td><td></td></tr>
<tr><td>ADD #2, R1</td><td>(1.1)</td></tr>
<tr><td>MOV R1, b</td><td></td></tr>
</table>
被扫描后,符号表包含图1.9中的条目。在该图中,我们假定一个字含四个字节,每个标识符需一个字,地址分配从零字节开始。
<table align=center width=450>
<tr><td>符号表</td><td>地址</td></tr>
<tr><td>a</td><td>0</td></tr>
<tr><td>b</td><td>4</td></tr>
<tr><td><center>图1.10 汇编器为(1.1)标识符构造的符号表 </center></td></tr>
</table>
</p>
<p>第二遍,汇编器再次扫描输入。这一次,它把每个操作码翻译成机器语言中代表那个操作的位串,把代表存储单元的每个标识符翻译成符号表中为这个标识符指定的地址。</p>
<p>第二遍扫描的输出是可重定位的机器代码,重定位指的是装入的起始地址可以是任意的内存单元L,也就是如果把L加到代码所有地址上,所有的引用将是正确的。于是,汇编的输入必须区别指令中引用可重定位地址的那些部分。</p>
</td>
</tr></table>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='1.4.0b.htm'"></img></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='1.4.1.htm'"></img></td>
</tr>
</table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -