博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编器工作原理
阅读量:5840 次
发布时间:2019-06-18

本文共 960 字,大约阅读时间需要 3 分钟。

hot3.png

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

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

                                             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

你可能感兴趣的文章
<转>Boost库之asio io_service以及run、run_one、poll、poll_one区别
查看>>
java中的内部类总结
查看>>
Day15 集合(二)
查看>>
git合并两个不同的仓库
查看>>
阿里集团搜索和推荐关于效率&稳定性的思考和实践
查看>>
【Java】使用pinyin4j获取汉字的全拼或首字母
查看>>
mysql 中合并查询结果union用法 or、in与union all 的查询效率
查看>>
How to dynamically load directive into page
查看>>
Caffe 学习:Eltwise层
查看>>
Linux共享库 Linux内核链表
查看>>
CentOS 7使用yum安装Docker
查看>>
touch all contents in a folder recursively
查看>>
再谈每周工作不要超过 40 小时
查看>>
<%= %> 和<%# %>的区别
查看>>
基本文本处理
查看>>
既然 int是值类型,而 class是引用类型,那么int是怎样从Object派生的呢?
查看>>
Linux SWAP 深度解读
查看>>
微信JS SDK Demo
查看>>
09Spring_AOP介绍和java本身的动态代理以及cglib代理
查看>>
Ecshop商品详情页显示当前会员等级价格
查看>>