谢邀

语言运行有两大类:解释器,编译器。

编译

需要编译的语言,以 c、c++ 为代表,你写的高级语言先经过一个编译器转为汇编语言,再用汇编器转为机器语言。常见的汇编语言有 Intel 和 AT&T 两种主流风格汇编语言。

C语言:

int add_a_and_b(int a, int b) {

return a + b;

}

int main() {

return add_a_and_b(2, 3);

}

汇编语言:

_add_a_and_b:

push %ebx

mov %eax, [%esp+8]

mov %ebx, [%esp+12]

add %eax, %ebx

pop %ebx

ret

_main:

push 3

push 2

call _add_a_and_b

add %esp, 8

ret

这里汇编语言直接操作寄存器。

建议手写:编译器,写了编译器才能理解高级语言怎么转化为AST,AST怎么转化为IR,IR怎么转化为汇编语言。寄存器分配、内存分配,还有各种优化都是值得试一试的。初学者必备的龙书虎书鲸书,助力你早日开编译器‘动物园’。优化到 GCC O1 的程度的工作量是可以接受的,适合作为大二学生的编译原理单人大作业。你可以自己随便造一个 benchmark,优化跑分。

机器码:

对以上的汇编语言进行简单翻译,机器码就是芯片直接可以运行的二进制。机器码可以参考“RiscV”这个教学版本的指令集。以上是如果没有操作系统单机运行一个程序的情况。

建议手写:Verilog的加法器、减法器(小作业)

建议手写:Verilog的RiscV简易实现。为什么RiscV?因为精简,还有toolchain帮你debug。可以作为大二学生的体系结构单人大作业。理解TLB的技术细节(虽然教学板子RAM不够OS,但是你可以理性愉悦),理解多核Cache Line一致性问题,理解多发射的Tomasulo。实现多核是可选非必须的。

如果有操作系统

操作系统的功能是:操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级电脑的大型操作系统。许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面,而有些仅使用命令行界面,而将图形用户界面视为一种非必要的应用程序。

操作系统里面运行一个程序,其实运算部分的机器码不需要改变,只有系统调用需要改。

操作系统里面,你运行的程序会遭遇“时钟中断”,然后从‘专注于’运行一个程序切换到‘专注于’运行另一个程序。你的程序会使用虚拟地址,也就是说你的程序除了调用一些系统调用的时候外,和没有操作系统的时候运行几乎一样。建议学习:中断向量。

为什么没有感觉程序断了呢?答:“时钟中断”足够短,比如(我瞎扯一个时间)1ms 就切换一下,你不会觉得没有正在运行的程序断了。

建议手写: PintOS Project。填空啦,一个操作系统内核。工作量不太大,可以作为大二学生的操作系统单人大作业。这个有很详细的guide,看不懂可以多看看,或者看开一些。

解释器

以 python 为代表

一个二进制程序把你写的高级语言的代码作为文本读入并按照运算流程进行模拟,就是解释器的大致工作方式。运行方式类似于 NOIP 的“读程序写结果”人体解释器,就是傻傻地模拟一下。解释器运行比编译运行通常慢。

编译后用虚拟机运行

以java代表

这里的虚拟机指的是java虚拟机之类的,并不是 CS 里面的对于 OS 的 VM 的意思。javac是编译器,把一个高级语言的代码编译为一个并不是机器码的class二进制码。这个class二进制码可以由另一个机器码的程序java(JVM)来解释运行。

java加法的底层_常见开发语言加减乘除底层是如何做到的?相关推荐

  1. java商城_商城系统常见开发语言及特点分享

    "对于软件开发的编程语言,其实没有万能灵药." 商城系统常见开发语言及特点 就目前而言,商城系统常见的开发语言有java.php..net等等.我们在搭建网上商城系统时,应该使用哪 ...

  2. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?

    Python作为计算机程序设计语言的其中一种,最初是被设计用于编写自动化脚本(shell),随着版本的不断更新.语言新功能的添加和机器学习的兴起,Python从2017年开始受到广泛关注. Pytho ...

  3. java和php哪个开发网站好,网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?...

    首先我们得知道Java和php都是一种后端开发语言.而后端开发语言是做什么用的呢? 后端语言主要应用于网站架构建设.业务流程开发及数据库的开发.所以它的强大可想而知了. 但是后端开发语言如果要详细统计 ...

  4. 区块链开发如何选择底层平台和开发语言?

    2019独角兽企业重金招聘Python工程师标准>>> 大多数人并不需要自己重新创建一套区块链,而是基于现有的区块链底层平台去开发自己的应用,对于类似加密算法. P2P技术.共识算法 ...

  5. 中国区块链开发者真实现状:半数只懂皮毛; 数据分析师吃香; Java/Python或成为主流开发语言...

    作者 | Aholiab 出品 | 区块链大本营(blockchain_camp) 近期,CSDN强势发布了<2018-2019中国开发者调查报告>(以下简称「报告」),报告根据2018年 ...

  6. java 菲律宾招聘_[菲律宾 -没有语言要求,汉语流利就行] 招聘: H5 前端开发工程师/ Java 开发工程师/ Python 工程师 ,提供住宿...

    H5 前端开发工程师 职位描述: 1. 参与前端架构体系的规划.设计.建设: 2. 参与前端项目架构体系的搭建: 3. 参与网站性能优化.产品体验优化.以及产品功能迭代: 4. 参与 HTML5 等前 ...

  7. concurrent 底层_万字长文!从底层开始带你了解并发编程,彻底帮你搞懂Java锁!

    线程是否要锁住同步资源 锁住 悲观锁 不锁住 乐观锁 锁住同步资源失败 线程是否要阻塞 阻塞 不阻塞自旋锁,适应性自旋锁 多个线程竞争同步资源的流程细节有没有区别 不锁住资源,多个线程只有一个能修改资 ...

  8. java面试上机_常见的Java上机面试题

    常见的 Java 上机面试题 在程序员面试中, 主要的考试形式分为笔试和上机编程考试两部分. 笔试主要考查面试者的 基础是否牢固:上机考试主要考查面试者的实际开发能力和技术技巧. 上机编程考试,要求面 ...

  9. java 主从表_如何开发主从报表

    主从报表是一种很常见的报表需求:报表数据分为上下两部分,上方为汇总说明信息,下方为明细列表信息.如何快速制作这类报表呢?下面我们通过一个例子来看一下润乾报表是如何做的: 需求说明: 销售系统中的客户订 ...

最新文章

  1. R语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)
  2. 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )
  3. C# 操作Sql Server 学习总结
  4. Kubernetes 选择 IPVS
  5. echart triggeron设置两个方法_6个超实用方法:打造PPT立体空间感
  6. python字典默认输出键还是值_说说在 Python 字典中如何在读取不存在的键时得到一个默认值...
  7. 2016蓝桥杯省赛---java---B---3(凑算式)
  8. fatal error C1010: unexpected end of file while...
  9. oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器
  10. (128)System Verilog下降沿检测实例
  11. 推特大规模攻击幕后黑手竟是 17 岁少年?企业云安全迫在眉睫!
  12. 项目汇报模板—再也不怕撕逼了
  13. 【python项目开发】爬虫基础知识
  14. 中国电信-应招知识库(专业知识)
  15. 改变PSD文件单一的图标,让图标变成图像缩略图
  16. 超声延时聚焦原理及算法仿真
  17. office的最佳快捷键——快速访问工具栏
  18. 研修国学请注意选好教材
  19. 5分钟就能做一个Excel动态图表,你确定不学学?
  20. 字节题--雀魂启动!

热门文章

  1. java调用扫描仪_通过Java调用Dynamsoft .NET TWAIN SDK控制扫描仪扫描文档
  2. zephir-php函数和异常处理
  3. Inherit Velocity
  4. 当前目录./和父目录../辨析
  5. Cadence Allegro调整丝印技巧-先自动调整再手动微调图文教程及视频演示
  6. vas use record
  7. C语言far远程指针,C语言近程型(near)和远程型(far)的区别是什么?
  8. jsp留言板源代码一
  9. XML Httprequest对象
  10. 单片机c语言中枚举,嵌入式开发-枚举详解---朱有鹏