一、在软硬件接口中,CPU帮我们做了什么事情

1、从硬件角度看CPU

2、软件工程师看CPU

3、不同的cpu能听懂的语言不太一样

4、不同的指令无法相通

5、存储程序型计算机

一台IBM的Plugboard

二、从编译到汇编,代码怎么变成机器码?

1、C 语言程序程序案例

1、我们拿一小段真实的 C 语言程序来看看。

[root@luoahong c]# cat test.c

int main()

{

int a = 1;

int b = 2;

a = a + b;

}

2、要让这段程序在一个 Linux 操作系统上跑起来,我们需要把整个程序翻译成一个汇编语言

[root@luoahong c]# gcc -g -c test.c

[root@luoahong c]# objdump -d -M intel -S test.o

3、在一个 Linux 操作系统上,我们可以简单地使用 gcc 和 objdump 这样两条命令,把对应的汇编代码和机器码都打印出来。

[root@luoahong c]# objdump -d -M intel -S test.o

test.o: file format elf64-x86-64

Disassembly of section .text:

0000000000000000 :

int main()

{

0:55 push rbp

1:48 89 e5 mov rbp,rsp

int a = 1;

4:c7 45 fc 01 00 00 00 mov DWORD PTR [rbp-0x4],0x1

int b = 2;

b:c7 45 f8 02 00 00 00 mov DWORD PTR [rbp-0x8],0x2

a = a + b;

12:8b 45 f8 mov eax,DWORD PTR [rbp-0x8]

15:01 45 fc add DWORD PTR [rbp-0x4],eax

}

18:5d pop rbp

19:c3 ret

2、为什么需要汇编代码呢?

我们实际在用 GCC(GUC 编译器套装,GUI CompilerCollectipon)编译器的时候,可以直接把代码编译成机器码呀,

为什么还需要汇编代码呢?原因很简单,你看着那一串数字表示的机器码,是不是摸不着头脑?但是即使你没有学过汇编代码,

看的时候多少也能“猜”出一些这些代码的含义。因为汇编代码其实就是“给程序员看的机器码”,也正因为这样,机器码和汇编代码是一一对应的。

3、从高级语言—汇编代码—机器码

从高级语言到汇编代码,再到机器码,就是一个日常开发程序,最终变成了 CPU 可以执行的计算机指令的过程。

三、解析指令和机器码

1、常见指令

你可能一下子记不住,或者对这些指令的含义还不能一下子掌握,这里我画了一个表格,给你举例子说明一下,帮你理解、记忆。

2、MIPS的指令

为了读起来方便,我们一般把对应的二进制数,用 16 进制表示出来。在这里,也就是0X02324020。这个数字也就是这条指令对应的机器码。

回到开头我们说的打孔带。如果我们用打孔代表 1,没有打孔代表 0,用 4 行 8 列代表一条指令来打一个穿孔纸带,那么这条命令大概就长这样:

四、总结和延伸

到这里,想必你也应该明白了,我们在这一讲的开头介绍的打孔卡,其实就是一种存储程序型计算机。

只是这整个程序的机器码,不是通过计算机编译出来的,而是由程序员,用人脑“编译”成一张张卡片的。对应的程序,也不是存储在设备里,而是存储成一张打好孔的卡片。

但是整个程序运行的逻辑和其他 CPU 的机器语言没有什么分别,也是处理一串“0”和“1”组成的机器码而已

这一讲里,我们看到了一个 C 语言程序,是怎么被编译成为汇编语言,乃至通过汇编器再翻译成机器码的。

除了 C 这样的编译型的语言之外,不管是 Python 这样的解释型语言,还是 Java 这样使用虚拟机的语言,其实最终都是由不同形式的程序,把我们写好的代码,转换成 CPU 能够理解的机器码来执行的。

只是解释型语言,是通过解释器在程序运行的时候逐句翻译,而 Java 这样使用虚拟机的语言,则是由虚拟机对编译出来的中间代码进行解释,或者即时编译成为机器码来最终执行。

然而,单单理解一条指令是怎么变成机器码的肯定是不够的。接下来的几节,我会深入讲解,包含条件、循环、函数、递归这些语句的完整程序,是怎么在 CPU里执行的

计算机组成原理,P函数,深入浅出计算机组成原理学习笔记:第五讲相关推荐

  1. 《计算机是怎样跑起来的》学习笔记

    <计算机是怎样跑起来的>学习笔记 前言 1 计算机的三大原则 2 试着制造一台计算机吧 3 体验一次手工编程 4 程序像河水一样流动着 5 与算法成为好朋友的七个要点 5.1 算法中解决问 ...

  2. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  3. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  4. 《深入浅出Docker》学习笔记

    <深入浅出Docker>学习笔记 第三章:docker 安装 linux服务器安装:-略 windows服务器安装:-略 确认安装结果 docker --version 第四章:纵观DOc ...

  5. C++常函数和常对象学习笔记

    C++常函数和常对象学习笔记 一.友元的概述 二.友元的语法 三.友元类 3.1 通过传入参数来访问类的私有成员 3.2 通过类内指针来访问类的私有成员 四.类的友元成员函数 五.友元类的注意 一.友 ...

  6. 【计算机专业漫谈】【计算机系统基础学习笔记】W1-计算机系统概述

    利用空档期时间学习一下计算机系统基础,以前对这些知识只停留在应试层面,今天终于能详细理解一下了.参考课程为南京大学袁春风老师的计算机系统基础MOOC,参考书籍也是袁老师的教材,这是我的听课+自查资料整 ...

  7. 计算机图形学(Computer Graphics)的学习笔记

    目录 1.计算机图形学是什么 2.计算机图形学学什么 3.计算机图形学应用举例 4.计算机图形学主要内容 5.图形的分类 6.图形要素 7.图形的表达方式 8.图形学应用生活中的例子 9.计算机图形学 ...

  8. 小猪佩奇用计算机怎么弹,小猪佩奇第一季学习笔记计算机软件及应用IT计算机专业资料-小猪.pdf...

    WORD 格式 WORD 格式 1-21 集 1-21 集 [学习笔记]重点词组讲解 PeppaPig 第一季:踏水坑 [学习笔记]重点词组讲解 PeppaPig 第一季:踏水坑 1. muddy: ...

  9. matlab 调用子函数返回值,matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 函数返回一个值 返回值不必使用return语句,而是直接将需要返回的变 ...

最新文章

  1. PHP 缓存插件之 Zend Opcache ( 取代 APC )
  2. 网站模糊测试爆破工具Wfuzz
  3. 利用 test 命令的测试功能
  4. 成功解决Error:invalid character in identifier
  5. 二级c语言基础知识pdf下载,全国计算机等级考试二级C语言公共基础知识.pdf
  6. Ubuntu下使用VSCode的launch.json及tasks.json编写
  7. 高可用集群技术之corosync应用详解(一)
  8. leetcode 88
  9. Python 线程信号量 semaphore - Python零基础入门教程
  10. 解决多字段联合逻辑校验问题【享学Spring MVC】
  11. 游戏服务器之生成Dump文件
  12. windows 上网重新刷新IP
  13. liunx 之 redHat 下 java 环境的配置和安装
  14. redis如何选择合适的数据结构
  15. 西门子cpu指示灯含义_CPU中的指示灯亮的意思
  16. oracle 总僵尸进程,subprocess子进程kill后存在僵尸进程的原因及处理方法
  17. NDK学习笔记-NDK开发流程
  18. 算法设计与分析课设-探寻宝藏-双线程DP问题-C语言
  19. MySQL 3306端口被占用 ERROR 1043 (08S01): Bad handshake
  20. Linux实战教学笔记28:企业级LNMP环境应用实践

热门文章

  1. 用Visual Studio 2019 开发stm32,cortex-m3, arm
  2. html怎么在图片上加文字_怎么把图片文字转换成word文档
  3. html5文件阅读器api,html 5 读取本地文件API
  4. 运动会成绩管理系统python_Python 实现简易版成绩管理系统
  5. cpu不支持虚拟装linux,linux 查看cpu是不是支持虚拟化
  6. linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)
  7. 无失真压缩法可以减少冗余_机考样题(选择题带标准答案).docx
  8. python init self_转载--------Python中:self和__init__的含义 + 为何要有self和__init__
  9. python中的字典推导式_17.python 字典推导式(经典代码)
  10. cmmi文档_实施CMMI过程改进的框架介绍