计算机速成课 第八集 指令和程序

1. 给 CPU 一些指令来运行

  • CPU 强大,是因为可编程
  • 写入不同指令,就会执行不同任务
  • 是一块硬件,可以被软件控制

2. 举例:00101110

  • 假设前 4 位是操作码,后四位指定一个内存地址,或寄存器
  • 假设 0010 代表 LOAD_A 指令,然后把后四位 1110(十进制的14) 指定内存地址的值,放入寄存器A。于是,我们把 0010 1110 看成 “LOAD_A 14” 的指令
  • 具体举例:“LOAD_A 14”是从地址 14 中拿到数字 3,放入寄存器 A(最好看图,大家可以看原视频,更清晰)
  • 两个寄存器里面的数字相加,顺序很重要,因为结果会存在第二个寄存器
  • 视频用到的指令:LOAD_A, LOAD_B, STORE_A, ADD, SUB, JUMP, JUMP_NEG HALT
  • SUB:减法
  • JUMP:跳转:让程序跳转到新位置
    • JUMP 0 可以跳回开头
    • 底层的实现方式是把指令后 4 位代表的内存地址的值覆盖掉“指令地址寄存器”里的值
    • 只有特定条件满足了,才能 JUMP,比如 JUMP NEGATIVE 就是条件跳转的一个例子
    • 其他类型的 JUMP
      • JUMP IF EQUAL: 如果相等
      • JUMP IF GREATER: 如果更大
  • JUML_NEGATIVE
    • 只在 ALU 的“负数标志”(算数结果为负,“负数标志”才是真)为真时,进行 JUMP,如果是假,就会执行
  • HALT
    • 计算机需要知道什么时候该停下来,否则 CPU 会不停地跑下去,这叫无限循环(infinite loop)
    • 指令和数据:都是存在同一个内存里面的,在根本层面上没有什么区别,都是二进制数,HALT 很重要,能区分指令和数据

3. 软件强大之处

  • 让我们做到硬件做不到的事情,例如:ALU 没有除法功能,程序给了我们这个功能,
  • 两种策略:
    • 出现原因:因为 4 位二进制无法表示数字 17,因此,真正的现代 CPU 用两种策略: ,最直接的方法是用更多位来代表指令,比如 32 位或 64 位,这叫指令长度。
    • 策略1: 指令长度(instruction length)
    • 策略2: 可变指令长度(variable length instruction):
      • 例如:某个 CPU 用 8 位长度的操作码,如果看到 HALT 指令,HALT 不需要额外数据,那么会马上执行
      • 如果看到 JUMP,它得知道位置值,这个值在 JUMP 的后面,这叫「立即值」(Immediate Value)
      • 这样设计,指令可以是任意长度,但是会让读取阶段复杂一点点

4. 真实的例子

  • 1971 年,英特尔发布了 4004 处理器,是第一次把 CPU 做成一个芯片,给后来的英特尔处理器打下了基础
  • 它支持 46 个指令,足够做一台能用的电脑,
  • 处理器从 1971 年到现在发展巨大,现代 CPU,例如英特尔酷睿 i7,有上千个指令和指令变种,长度从 1 到 15 个字节
  • 指令越来越多,是因为给CPU设计了越来越多的功能
原文地址:https://www.cnblogs.com/zxxsteven/p/15664753.html