汇编器工作原理

为了翻译汇编语言程序,汇编器需要知道两件事情:每个助记符的操作码和每个标号的地址。操作码信息以表形式内置在汇编器中,该表给出对应每个助记符的操作码。这个表被称为操作码表。

       对庆标号的地址必须由汇编器通过扫描源程序确定。汇编器第一遍扫描源程序只是为了确定每个标号的地址。只要在某行的开始发现标号,汇编器就将该标号及其地址输入到符号表中。在第一遍扫描结束时,符号表将包含程序中使用的所有标号及其地址。汇编器然后执行第二遍扫描,使用操作码表和符号表中的信息汇编每条指令。

                                             ld    x                 location_counter

                                             st   y                            3(address)

                                             halt

第一遍扫描此处---->  x :     dw  5

                                  y:     dw  0

                                  z:     dw  x

                                                图3-19

  汇编器首先将内部变量location_counter初始化为0.在第一遍扫描时,汇编器从上向下一次一行地扫描程序。每次移到下一行,汇编器就将location_counter加1。因此location_counter中的值总是等于当前行的地址。如果在某行的开始发现标号,汇编器就将该标号和location_counter中的当前值输入到符号表。例如,当汇编器在图3-19中第一条dw所在的行发现 x 时,location_counter包含3(这是 x 的地址)。汇编器将 x 和3输入到符号表中,将lcoation_counter加1,然后继续扫描下一行。在第一遍扫描结束时,汇编器已经建立起如图3-20所示的符号表。

                    符号表

          (由汇编器创建)

       符号     |      地址(十六进制)

----------------

       x          |     3

       y          |     4                                            图3-20

       z          |      5

 

    在第二遍扫描时,汇编器根据操作码表和符号表中的信息“汇编”每条指令。例如,在第二遍扫描过和中处理

ld  x 指令时,汇编器在操作码表中查找助记符 ld ,在符号表中查找符号 x ,并检索它们的值(分别是0和3).然后汇编器使用适当的位数(操作码4位,地址12位),将这两个值汇编成机器指令0000 0000 0000 0010(十六制表示是:0003)。

      如果汇编语言指令或伪指令中的地址是绝对地址,则汇编器必须将基转换成二进制。

posted @ 2013-12-23 15:37  sidely  阅读(2735)  评论(0)    收藏  举报