• 【05】计算机指令:让我们试试用纸带编程


    【计算机组成原理】学习笔记——总目录

    引言

    打孔卡(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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1、编译过程

    • C语言程序—>汇编语言【ASM,Assembly Language】程序

    • 汇编语言【ASM,Assembly Language】程序—>机器码【Machine Code】(由0和1组成,即一条条的计算机指令。这样一串串的16进制数字,是CPU真正认识的计算机指令。)

    • 在这里插入图片描述

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

    三、解析指令和机器码

    1、我们日常用的 Intel CPU,有 2000 条左右的 CPU 指令,常见的指令可以分成五大类

    1. 算术类指令。我们的加减乘除,在 CPU 层面,都会变成一条条算术类指令。
    2. 数据传输类指令。给变量赋值、在内存里读写数据,用的都是数据传输类指令。
    3. 逻辑类指令。逻辑上的与或非,都是这一类指令。
    4. 条件分支类指令。日常我们写的“if/else”,其实都是条件分支类指令。
    5. 无条件跳转指令。写一些大一点的程序,我们常常需要写一些函数或者方法。在调用函数的时候,其实就是发起了一个无条件跳转指令。
      在这里插入图片描述

    2、MIPS 指令集
    在这里插入图片描述

    MIPS 的指令是一个 32 位的整数,高 6 位叫操作码(Opcode),也就是代表这条指令具体是一条什么样的指令,剩下的 26 位有三种格式,分别是 R、I 和 J。

    • R 指令是一般用来做算术和逻辑操作,里面有读取和写入数据的寄存器的地址。如果是逻辑位移操作,后面还有位移操作的位移量,而最后的功能码,则是在前面的操作码不够的时候,扩展操作码表示对应的具体指令的。

    • I 指令,则通常是用在数据传输、条件分支,以及在运算的时候使用的并非变量还是常数的时候。这个时候,没有了位移量和操作码,也没有了第三个寄存器,而是把这三部分直接合并成了一个地址值或者一个常数。

    • J 指令就是一个跳转指令,高 6 位之外的 26 位都是一个跳转后的地址。

    add $t0,$s2,$s1
    
    • 1

    我以一个简单的加法算术指令 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机制的数字,即各种指令,实现相应的指令。
    • 可以分清:存储程序型计算机【将程序存储在存储器中】 和 非存储程序型计算机【早期的““插线板计算机””】

    【计算机组成原理】学习笔记——总目录

  • 相关阅读:
    网页报告不能直接转换成Word、PDF格式怎么办?Spire.doc控件可以轻松解决
    Python 利用pandas 和 matplotlib绘制柱状图
    Camunda 7.x 系列【51】运行时服务 RuntimeService
    vuex实现简易购物车加购效果
    HCNP Routing&Switching之VRRP基础
    leetcode 打家劫舍篇
    RocketMQ
    【算法】【递归与动态规划模块】逻辑表达式组成期望结果的所有种数计算
    Mybatis(一)
    Shell脚本案例:安装指定路径下的所有apk到安卓设备
  • 原文地址:https://blog.csdn.net/sinat_40003796/article/details/125906364