【系统程序】2.1基本组译器功能

2.1基本组译器功能

2.1.1简易SIC组译器

组译器的两阶段处理

  • 1.扫描原始程序中的标记,并计算位置
  • 2.执行前述的转换动作

组译器指引(虚拟指令)

  • 1.用於只是组译器该如何处理原始程序,而不会转换成指令
  • 2.EX:BYTE,WORD是转换位元or字组指令,RESB,RESW保留记忆体空间

object code


一个机器码包含标头(Header),本文(text),结束(end)的纪录

  • 标头纪录:
    • 栏1 H
    • 栏2-7 程序名称
    • 栏8-13 目的程序的起始位置
    • 栏14-19 目的程序的长度(16进值)
  • 本文纪录:
    • 栏1 T
    • 栏2-7 目的码的起始位置
    • 栏8-9 目的码的长度
    • 栏10-69 目的码
  • 结束纪录:
    • 栏1 E
    • 栏2-7 目的程序中第一个可执行的指令

2.1.2组译器演算法与资料结构

资料结构

OPTAB(运算码表)

  • 内容:
    • 查询助记码
    • 转译成对应的机器语言
    • 指令格式和长度
  • 第一阶段:
    • 验证原始码是否正确
    • 找出指令长度来增加LOCCTR值
  • 第二阶段:
    • 确定指令格式
    • 转成机器码

LOCCTR(位置计数器)

  • 协助位址的分配
  • 初始值即为start
  • 处理完每一行的叙述後,长度加到LOCCTR中

SYMTAB(符号表)

  • 内容:
    • 纪录名称
    • 纪录位址
    • 错误旗标
    • 资料或指令的其他资讯(资料型态或长度)
  • 第一阶段:
    • 找出原始程序的标记和LOCCTR值存到符号表中
  • 第二阶段:
    • 在SYMTAB中寻找运算元的标记符号

<<:  C# 回家作业(1)

>>:  SQL Server 如何判断 PLE (页面的预期寿命) - 心得分享

[day21]Vue实作-登出及会员功能实作

登出模式及未登入限制读取页面 navbar.vue调整 登出登入的切换调整 利用v-show来判断是...

Day16 NodeJS-Express I

从今天开始,程序码和实作练习的部份会占比较多的部份,终於要进入实用的NodeJS网页框架-Expre...

Day16_HTML语法13

有时候我们希望使用者输入的资料符合我们想要的格式,因此我们可以做一些设定,当使用者输入的资料不符合格...

Day 17:专案03 - PTT 八卦版爬虫02 | session、post

昨天教到使用cookie让服务器记得我们曾经做过哪些事,但缺点就是每次Request都要加上cook...

DAY14 - 拓扑排序

今天要写拓扑排序~~ 一个有向无环图,必定存在一种(以上)的拓扑排序 定义: 将图中所有点展开成序列...