6.1 背景知识

符号化的语言称为汇编,翻译程序称为汇编编译器,汇编编译器对每个汇编命令的所有部分进行解析,将每个部分翻译成它对应的二进制码,并将生成的二进制码汇编成真正能被硬件执行的二进制指令。
编写汇编编译器的复杂性在于:允许汇编程序使用符号来代指内存地址,我们希望汇编器来管理这些用户自定义的符号,将他们解析成物理内存地址,一般采用符号表来完成这个任务。

6.1.1 符号

符号在汇编程序中通常有两个用途:

  • 变量
    程序员可以使用符号的变量名称,编译器会“自动地”为其分配内存地址
  • 标签
    在程序中用符号来标注不同的位置

6.1.2 符号解析

我们首先制定两个任意性规则:

  • 翻译后的代码将被存储到计算机中起始位置为0的内存中
  • 变量将被分配到起始位置为1024的内存中

有三点需要说明:

  • 我们定义的变量分配规则决定了能运行的程序只能有1024条指令,实际的程序(比如操作系统)显然要大很多,因此存储变量的基地址应该设得距离代码存储区更远一些
  • 每条源代码命令映射到一个字的假设过于天真,一般来说,某些汇编命令会被翻译成好几条机器指令,因此它会占据好几个内存单元,为解决此问题,翻译程序会记录每条源代码产生的字的个数,然后相应的更新它的“指令内存计数器”
  • 每个变量用一个单独的内存单元来表示的假设也不切实际,汇编程序支持多种类型的变量,它们在目标计算机上占用不同的内存空间,因此当为变量分配内存空间时,翻译程序必须考虑他们的数据类型和硬件内存单元的宽度

6.1.3 汇编编译器

汇编编译器实际上主要是个文本处理程序,设计目的是用来提供翻译服务,汇编编译器对每个符号命令执行下面的操作:

  • 解析出符号命令所在的域
  • 对于每个域,产生机器语言中相应的位域
  • 用内存单元的数字地址来替换所有的符号引用
  • 将二进制码汇编成完整的机器指令

其中符号处理最为复杂,是汇编编译器的主要功能

python代码实现

Hack汇编代码的四种语法

  • (Xxx)    //标签 --> 第一遍读取阶段将标签放入符号表
  • @Xxx    //Xxx是变量或标签 --> 第二遍读取阶段若Xxx不在符号表中,那Xxx一定是变量,将(Xxx,n)放入符号表,n代表下一个可使用的RAM地址,分配的RAM地址是连续的数字,从地址16开始,并翻译成A命令
  • D=M+A   //算术或逻辑运算 --> D命令
  • D;JMP    //跳转 --> D命令

《计算机系统要素》 第六章 汇编编译器相关推荐

  1. 计算机要素--第六章 汇编编译器

    计算机系统要素,从零开始构建现代计算机(nand2tetris) 如果完成了本书所有的项目 你将会获得以下成就 构建出一台计算机(在模拟器上运行) 实现一门语言和相应的语言标准库 实现一个简单的编译器 ...

  2. 计算机系统要素--第六章,01-HACK汇编编译器模块介绍

    从零开始构建现代计算机--第六章,01-HACK汇编编译器模块介绍 语法分析器(Parser) 编码(Code) 无符号程序的汇编编译器 符号表(Symbol Table) 有符号程序的汇编编译器 H ...

  3. 计算机系统要素--第六章,02-HACK汇编编译器实现

    从零开始构建现代计算机--第六章,02-HACK汇编编译器实现 要点 A-指令 C-指令 符号表 python实现 要点 关心三点: A指令,C指令,符号表 A-指令 A指令:将@num的num转为1 ...

  4. 计算机系统导论第六章答案,《计算机系统概论》-第4章-习题答案

    写出冯·诺依曼模型的5个组成部分,并写出各个部件的功能和目的. 输入设备:输入数据 输出设备:输出结果 控制器:控制程序执行 内存:存放程序(各类运行指令) 处理器:对数据进行处理和运算git 简要描 ...

  5. c语言实现HACK汇编编译器(一)

    汇编编译器: 汇编程序在被计算机执行之前,必须被翻译成计算机的二进制语言.翻译任务是由汇编编译器来完成的.汇编编译器的输入是一串汇编命令,然后产生一串等价的二进制指令作为输出.生成的代码被加载到计算机 ...

  6. 计算机系统要素:第六章 Part2 汇编编译器(symbol)

    要给汇编编译器加入符号,首先要明确这个汇编编译器有哪些符号: 预定义符号:SP,LCL等,这些符号预先就在SymbleTable中定义好了对应内存的地址 变量variables:注意,变量是在第二遍读 ...

  7. 微型计算机系统与接口重要吗,微型计算机系统与接口 马宏锋 等编著 第六章

    微型计算机系统与接口 马宏锋 等编著 第六章 (67页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 6.1 输入/输出接口概述 内容简介6 ...

  8. 深入理解计算机系统——第六章 The Memory Hierarchy

    深入理解计算机系统--第六章 The Memory Hierarchy 6.1 Storage Technologies 6.1.1 Random Access Memory Nonvolatile ...

  9. 计算机系统要素-从零开始构建现代计算机--第一章,01-用与非门实现与戓非

    第一章,01-用与非门实现与戓非 简介 实现的逻辑门 Nand原理 Nand真值表 符号约定 用Nand实现And 真值表 转换为Nand表示 电路连接 用Nand实现Or 真值表 转换为Nand表示 ...

最新文章

  1. 从源码分析DEARGUI之add_tree_node
  2. oracle pde文件导入
  3. C# wpf中DataGrid 支持汇总行
  4. c语言枚举入门,C语言入门之枚举与位运算(1)
  5. html里空间顺序,按空间顺序写我的房间作文
  6. 静态成员函数与静态成员变量
  7. Windows8之hyper-v探索
  8. 软件portable
  9. springboot获取active_springboot 2.3.0+activeRecord获取对象报类型转换错误
  10. 2018华为数通技术大赛复赛拓扑具体配置
  11. 服务器装凤凰系统,凤凰系统装在云服务器
  12. 网络分析工具-Mtr
  13. 鼎立MOS测试设备调试
  14. Bioventus在马来西亚上市DUROLANE(R),并选中Athrotech作为独家经销伙伴
  15. 小米摄像头 rtmp_如何使用外部摄像头进行AmazonLive_wotobuy
  16. 三运放差分放大电路分析_三运放组成的差分放大器电路图及特点
  17. mysql compact_MySQL基本操作
  18. 中国移动话费查询,短信查询,各种免费查询!以后别打10086了
  19. 《最优状态估计-卡尔曼,H∞及非线性滤波》:第10章 有关卡尔曼滤波的其他讨论
  20. EBS:AP_CHECKRUN_CONC_PROCESSES_ALL

热门文章

  1. Mac配置maven环境与settings设置
  2. 家居美学新主张——冰箱天然紫晶着色,可绘画面板!
  3. 路由器测试的类型和方法[转]
  4. 失物招领小程序,失物招领微信小程序,校园失物招领小程序系统毕设作品
  5. 初一数学计算机教案,人教版初中数学教案 初中数学教案范文精选
  6. 如何使用ping命令检查网络情况
  7. 安霸入伙,“开放视觉”ADAS 俱乐部再迎新成员
  8. Weblogic启动报错weblogic.management.ManagementException: Unable to obtain lock on
  9. [转帖]超能网--显示接口
  10. 大咖丨昆仑数据陈晨:工业大数据真正要做的是智能分析和智能决策