chili 默默学编程

《计算机系统要素》4 - 5


自用笔记

--- --- --- --- --- --- --- 4 机器语言
    面向语言进行阐述,所以对大多数底层硬件平台进行抽象,集中讨论三个主要的抽象体上:
    - 处理器
    - 内存
    - 一组寄存器

    4.1 背景知识
    4.1.1 机器
    - 机器语言
        - 可以看作一种约定的形式
        - 它利用 处理器(processor)和 寄存器(register)来操控内存(memory)

    - 处理器(CPU):
        - 执行一组固定操作的设备
        - 操作包括:算术操作、逻辑操作、内存存取操作和控制操作
        - 操作的对象,是二进制的,来自寄存器和指定的内存的单元
        - 操作的结果,既可以存在寄存器内,也可以存在内存单元

    - 寄存器:
        - 内存访问较慢,需要很长的指令格式(一个地址需要 32 位)
        - 所以大多数处理器都配有一些寄存器,每个寄存器只存储 1 位
        - 相当于处理器的高速本地内存

    4.1.2 语言
    - 机器语言是一些列的编码指令
    - 为了知道这个指令的意思,就必须知道语言的规则,也就是底层硬件平台的指令集
        - 1010 ADD
        - 0011 R3
        - 0001 R1
        - 1001 R9
    - 汇编语言:符号表示二进制机器指令
    - 汇编编译器:将汇编程序翻译成二进制码

    - 不同的计算机在 CPU 的操作方式、寄存器数量和类型、汇编语法各不相同
    - 但是所有机器语言都支持相似的通用命令集合

    4.1.3 命令
    - 算数操作和逻辑操作(寄存器)
        - ADD R2 R1 R3  ; R1 + R3 并将结果存入 R2
        - ADD R2 R1 foo ; R1 + foo 并将结果存入 R2
        - AND R1 R1 R2  ; R1 and R2 并将结果存入 R1

    - 内存访问
        - 内存访问命令:
            - 第一类,算术命令、逻辑命令可以操作内存
            - 第二类 load store 用于在寄存器和内存之间传递数据
        - 寻址方法:
            - 直接寻址
                - LOAD R1 67 ; Memory[67] -> R1
                假设 bar 指向内存地址 67:
                - LOAD R1 bar
            - 立即寻址
                - LOADI R1 67 ; 67 -> R1,其中 67 是数值
            - 间接寻址
                - 指针寻址,例如数组,给定数组的第一个位置(基地址),数组的元素通过偏移来获得
                - ADD R1 foo j
                - LOAD R2 R1
                - STR R2 x
    - 控制流程
        - 程序通常以现形方式一个一个执行,偶尔也包括分支
        - 分支可以实现功能:
            - 反复
            - 有条件执行
            - 子程序调用
        - 为了实现跳转到程序的地址,程序的位置也用一些符号表示
        - 有条件跳转、无条件跳转

    4.2 规范详述
    4.2.1 概述
    - 冯-诺伊曼架构:
        - 1 个 CPU
        - 2 个独立的内存模块(指令内存、数据内存)
        - 2 个内存映射 I/O 设备(显示器和键盘)

    - 内存地址空间
        - 指令地址空间(instruction memory)
        - 数据地址空间(data memory)
        - 16 位宽,即 15 位地址空间,即可设地址最大 32k(16-bit)
        - CPU 仅能执行存储在指令内存中的程序
        - 指令内存是只读设备,程序通过某种外部方法被加载到指令内存中

    - 寄存器
        - 两个称为 D 和 A 的 16 位寄存器
        - D 仅用来存储数据值
        - A 既可以作为 数据寄存器 也可以作为 地址寄存器
            根据上下文的含义,A 的内容可以被解释称 数值 或者 数据内存的地址/指令内存的地址

    4.2.2 A-指令(地址指令)
        - A-指令就是将一个值存储到 A 寄存器中,这个值,可以是数值,也可以是地址
        - 三个作用:提供计算机获取数据的方式;获取地址就可以操作内存;这种赋值,可以实现命令跳转;
        (图 34)

    4.2.3 C-指令(计算指令)
        - 计算什么
        - 计算后的结果存储到哪里
        - 下一步做什么

    4.3 实现
    4.4 观点
    4.5 项目
--- --- --- --- --- --- ---

--- --- --- --- --- --- --- 5 计算机体系结构
    5.1 背景知识
    5.1.1 存储程序概念
        - 计算机基于固定的硬件平台,能够执行固定的指令集
        - 这些指令能够被当成构件模块,组成任意的程序
        - 1930 年以前,这些指令集被嵌入到硬件中
        - 现代计算机,这些指令逻辑被存储到计算机中,被称为“软件”
    5.1.2 冯诺伊曼结构
        - (图 35)
    5.1.3 内存
        - 内存中存有两种类型的信息:数据项和程序指令
    5.1.4 中央处理器
        - CPU 是计算机体系的核心,负责执行已经加载到内存中的指令,这些指令告诉 CPU 去执行不同的计算,对内存进行读/写操作,以及根据条件跳转去执行程序中其他指令
        - CPU 通过三个主要的硬件要素来执行这些任务:算术逻辑单元(ALU),控制单元,一组寄存器
        - ALU 负责执行算术和逻辑操作,如:加法,判断是否为整数,对数据字进行位操作
        - 寄存器:提高数据读取性能
        - 控制单元:指令的解码过程 / 还负责程序下一步需要取出和执行哪一条指令
    5.1.5 寄存器
        - 数据寄存器
        - 寻址寄存器
        - 程序计数寄存器
    5.1.6 输入输出
        - I/O 映射
    5.2 规范详述
    5.2.1 概述
        - PC(程序计数器)芯片 --> ROM 芯片
        - 不断的循环:取指令 - 执行
    5.2.2 CPU
        - CPU 与两个独立的内存模块相连
        - 一个是指令内存,从内存中读取指令
        - 另一个是数据内存,CPU 可以对其进行读/写操作
    5.2.3 指令内存
        - ROM
    5.2.4 数据内存
        - RAM
    5.3 实现
        - 图 36 37 38
    5.4 观点
    5.5 项目
--- --- --- --- --- --- ---

Image

Image

Image

Image

Image


reply ( 0 )