读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen
掌握目标语言的使用、编写 是非常重要的!!!
如果你要实现的Jack语言编译器是把Jack语言代码编译成虚拟机VM代码、或者直接成汇编代码,要完成源代码中unit A——> 目标语言代码转写此unit A 这个工作,缺少对目标语言代码的掌握是不行的。
所以:汇编作为最普遍的目标代码,是早晚都需要学会的。
贴几张书中截图,展示一下在vm层面,是如何实现诸如求积函数、数组元素赋值、对象实例赋值这样的高级语言代码典型unit的。
首先这是vm的函数执行内存模型、基本的pop/push指令:
1. 一个求积函数
2. 数组元素赋值: int bar[10]; bar[2]=19;
3. 实例对象的成员变量赋值:
读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen的更多相关文章
- 从零开始构建一个的asp.net Core 项目
最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到"He ...
- 从零开始构建一个的asp.net Core 项目(二)
接着上一篇博客继续进行.上一篇博客只是显示了简单的MVC视图页,这篇博客接着进行,连接上数据库,进行简单的CRUD. 首先我在Controllers文件夹点击右键,添加->控制器 弹出的对话框中 ...
- 从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备好的 ...
- 用webpack4从零开始构建react脚手架
用webpack4从零开始构建react脚手架 使用脚手架 git clone git@github.com:xiehaitao0229/react-wepack4-xht.git` `cd reac ...
- 使用ETL构建数据仓库的思考
使用ETL构建数据仓库的思考 背景:公司的数据仓库建设项目启动在即,所谓万事开头难,如何在我们数仓建设规划的前期做好业务数据准备和系统建设规划是我们需要思考的问题,这里根据之前的自己参与过的公司ODS ...
- react native系列 - 从零开始构建
从零开始构建第一步,当然是从hello world开始,第一课我们没什么代码都不写,只用生成的代码来打包apk.为什么一开始就要学会打包,因为如果连打包都不会,以后做好了也没用.学会了打包,才能让我们 ...
- 从零开始构建一个的asp.net Core 项目(一)
最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到“Hello W ...
- 尝试从零开始构建我的商城 (一) :使用Abp vNext快速一个简单的商城项目
尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝 ...
- 从零开始构建并编写神经网络---Keras【学习笔记】[1/2]
Keras简介: Keras是由纯python编写的基于theano/tensorflow的深度学习框架. Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果, ...
随机推荐
- NBU恢复数据库数据文件报错RMAN-06091
RMAN-06091: no channel allocated for maintenance (of an appropriate type) 一.错误信息 报错信息如下 Starting res ...
- 词向量---ELMO
1.ELMo(Embeddings from Language Models ) RNN-based language models(trained from lots of sentences) E ...
- python移动目录下所有子目录文件到新的总目录
python移动目录下所有子目录文件到新的总目录 import os import shutil def file(p): p=p z=os.listdir(p) for i ...
- RF元素定位的例子
Execute Javascript $("input[type='button']").click() Comment Click Button css=input.login_ ...
- 架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)
作者 | JackTian 微信公众号 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)备注:来自博客园 1.什么是 phpMyadmin 系统? ...
- MySQL | MySQL 数据库系统(一)
## 1.什么是 MySQL 数据库? MySQL 数据库是一个关系型数据库管理系统,是服务器领域中受欢迎的开源数据库系统,目前有 Oracle 公司主要负责运营与维护: ## 2.MySQL 数据库 ...
- mybatis框架,使用foreach实现复杂结果的查询--循环List集合方式
需求,根据用户角色列表 查询用户列表信息 之前我们传入的参数是Array,一个数组的形式,现在我们传入的是一个List集合,其他条件没有变化. /** * 需求:传入指定的用户角色,用户角色有1-n ...
- 使用EventBus对模块解耦(附实例)
用于模块间解耦,通过发布订阅的方式调用,每个人只负责自己的那部分. 写个小例子,比如现在有三个模块,订单.购物车.优惠券,由不同的人负责开发. 负责订单模块的人现在需要写个生成订单的方法,生成订单的逻 ...
- 【oracle】drop,truncate,delete用法
drop: drop table 表名:删表 truncate: truncate table 表名:清空数据 delete: delete table 表名 [where 条件]:删某数据 日志:d ...
- chrome-解决该扩展程序未列在 Chrome 网上应用店中
1.win10添加策略组 复制以下内容到.bat文件中,右键-以管理员身份运行,即可添加策略组 pushd "%~dp0" dir /b C:\Windows\servicing\ ...