概述
【计算机组成原理】学习笔记——总目录
【05】计算机指令:让我们试试用纸带编程
- 引言
- 一、在软硬件接口中,CPU帮我们做了什么?
- 二、从编译到汇编,代码怎么变成机器码?
- 三、解析指令和机器码
- 总结【个人总结的重点】
引言
打孔卡(Punched Card)【打孔卡,其实就是一种存储程序型计算机。】
现在使用的计算机,只能处理“机器码”,即一连串的0和1。
一、在软硬件接口中,CPU帮我们做了什么?
1、CPU:计算机的大脑,全程Central Processing Unit,中央处理器。
- 从硬件角度讲,CPU是一个超大规模的集成电路,通过电路实现加法、乘法及各种处理逻辑。
- 从软件工程师角度讲,CPU就是一个执行各种计算机指令(Instruction Code)的逻辑机器。【计算机指令:一门CPU能够听得懂的语言,可以叫做“机器语言”(Machine Language)】
2、不同的CPU能够听懂的语言不一样。
Intel(Windows)、ARM(苹果手机)有各自支持的语言,有两组不同的计算机指令集(Instruction Set)【“Set”:数学上的集合,代表不同的单词、语法】
3、一个计算机的程序,由成千上万条指令组成。平时是存储在存储器中的。
这种程序指令存储在存储器里面的计算机,我们就叫作存储程序型计算机(Stored-program Computer)。
4、非存储程序型的计算机【“插线板计算机”】
Plugboard Computer 的计算设备。我把它直译成“插线板计算机”。
在一个布满了各种插口和插座的板子上,工程师们用不同的电线来连接不同的插口和插座,从而来完成各种计算任务。
二、从编译到汇编,代码怎么变成机器码?
// test.c
int main()
{
int a = 1;
int b = 2;
a = a + b;
}
1、编译过程
-
C语言程序—>汇编语言【ASM,Assembly Language】程序
-
汇编语言【ASM,Assembly Language】程序—>机器码【Machine Code】(由0和1组成,即一条条的计算机指令。这样一串串的16进制数字,是CPU真正认识的计算机指令。)
-
从高级语言到汇编代码,再到机器码,就是一个日常开发程序,最终变成了 CPU 可以执行的计算机指令的过程。
三、解析指令和机器码
1、我们日常用的 Intel CPU,有 2000 条左右的 CPU 指令,常见的指令可以分成五大类:
- 算术类指令。我们的加减乘除,在 CPU 层面,都会变成一条条算术类指令。
- 数据传输类指令。给变量赋值、在内存里读写数据,用的都是数据传输类指令。
- 逻辑类指令。逻辑上的与或非,都是这一类指令。
- 条件分支类指令。日常我们写的“if/else”,其实都是条件分支类指令。
- 无条件跳转指令。写一些大一点的程序,我们常常需要写一些函数或者方法。在调用函数的时候,其实就是发起了一个无条件跳转指令。
2、MIPS 指令集
MIPS 的指令是一个 32 位的整数,高 6 位叫操作码(Opcode),也就是代表这条指令具体是一条什么样的指令,剩下的 26 位有三种格式,分别是 R、I 和 J。
-
R 指令是一般用来做算术和逻辑操作,里面有读取和写入数据的寄存器的地址。如果是逻辑位移操作,后面还有位移操作的位移量,而最后的功能码,则是在前面的操作码不够的时候,扩展操作码表示对应的具体指令的。
-
I 指令,则通常是用在数据传输、条件分支,以及在运算的时候使用的并非变量还是常数的时候。这个时候,没有了位移量和操作码,也没有了第三个寄存器,而是把这三部分直接合并成了一个地址值或者一个常数。
-
J 指令就是一个跳转指令,高 6 位之外的 26 位都是一个跳转后的地址。
add $t0,$s2,$s1
我以一个简单的加法算术指令 add t0,s1, $s2, 为例,给你解释。为了方便,我们下面都用十进制来表示对应的代码。
对应的 MIPS 指令里 opcode 是 0,rs 代表第一个寄存器 s1 的地址是 17,rt 代表第二个寄存器 s2 的地址是 18,rd 代表目标的临时寄存器 t0 的地址,是 8。因为不是位移操作,所以位移量是 0。把这些数字拼在一起,就变成了一个 MIPS 的加法指令。
为了读起来方便,我们一般把对应的二进制数,用 16 进制表示出来。在这里,也就是 0X02324020。这个数字也就是这条指令对应的机器码。
回到开头我们说的打孔带。如果我们用打孔代表 1,没有打孔代表 0,用 4 行 8 列代表一条指令来打一个穿孔纸带,那么这条命令大概就长这样:
总结【个人总结的重点】
- 理解编译过程:程序—>汇编语言—>机器码
- 了解不同的CPU有不同的指令集(不同的语言系统),所以Window是上写的程序,不能在苹果手机上运行,因为语言不通。
- 了解汇编语言指令分类【5大类】:算术类指令、数据传输类指令、逻辑类指令、条件分支类指令、无条件跳转指令
- 了解MIPS指令集【R、I、J指令】的工作原理:其实就是把各种信息组合到一起(不同信息由不同的数表示【0和1 的组合】),最后生成相应的16进制数,即机器码。
- 了解早期打孔机的工作原理,用一系列的0和1来组成16机制的数字,即各种指令,实现相应的指令。
- 可以分清:存储程序型计算机【将程序存储在存储器中】 和 非存储程序型计算机【早期的““插线板计算机””】
【计算机组成原理】学习笔记——总目录
最后
以上就是飘逸铅笔为你收集整理的【05】计算机指令:让我们试试用纸带编程引言一、在软硬件接口中,CPU帮我们做了什么?二、从编译到汇编,代码怎么变成机器码?三、解析指令和机器码总结【个人总结的重点】的全部内容,希望文章能够帮你解决【05】计算机指令:让我们试试用纸带编程引言一、在软硬件接口中,CPU帮我们做了什么?二、从编译到汇编,代码怎么变成机器码?三、解析指令和机器码总结【个人总结的重点】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复