汇编器工作原理

本文介绍了汇编语言程序翻译的基本原理,包括汇编器如何通过两次扫描源程序来确定助记符的操作码和标号的地址。文章详细解释了操作码表和符号表的作用,以及如何使用这些信息进行指令的翻译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

                                             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)。

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

转载于:https://my.oschina.net/u/218425/blog/76924

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值