计算机系统基础(一)笔记——Week1 计算机系统概述
本文最后更新于:2024年5月25日 凌晨
Week1 计算机系统概述
1.1 why learn?
举个例子1:
ISO C90标准下,32位系统运行以下C表达式
1 |
|
例子2:
1 |
|
以及很多有趣的例子…但我懒得记
1.2 计算机系统基本组成与功能
- 冯诺依曼结构
- 计算机=运算器+控制器+存储器+输入设备+输出设备
- 用二进制表示指令和数据,指令=操作码(指出操作类型)+地址码(指出操作数地址)
- 采用存储程序工作方式
- 现代计算机结构
- 计算机=CPU(运算器+控制器)+存储器+I/O设备
PC | 程序计数器 | IR | 指令寄存器 |
---|---|---|---|
MAR | 存储器地址寄存器 | MDR | 存储器数据寄存器 |
ALU | 算术逻辑部件 | GPRs | 通用寄存器组 |
程序如何执行的?
-
程序执行前
数据和指令事先存放在存储器,每条指令和每个数据都有地址,指令按序存放,由OP、ADDR字段组成,程序起始地址由PC给出
-
开始执行程序
- 根据PC取指令
- 指令译码
- 取操作数
- 指令执行
- 回写结果
- 修改PC的值
指令需给出的信息:
- 操作性质(操作码)
- 源操作数1 或/和 源操作数2(立即数、寄存器编号、存储地址)
- 目的操作数地址(寄存器编号、存储地址)
💡 存储地址的描述和操作数的数据结构有关
1.3 程序开发和执行过程简介
机器语言—>汇编语言—>高级程序设计语言
-
机器语言
01串组成
-
汇编语言程序
将汇编语言转换为机器语言,由汇编指令构成
汇编指令:用助记符和标号来表示的指令
指令:包含操作码和操作数或其地址码
(机器指令用二进制,汇编指令用符号)只能描述取/存一个数,两个数的加减乘除或与…
1
2
3Ld M#,R# (将存储单元内容装入寄存器)
St R#,M# (将寄存器内容写入存储器)
add B -
高级语言
有两种方式转换为机器语言(编译/解释)
- 编译程序(C/C++):将源程序转换为机器级目标程序,执行时启动目标程序
- 解释程序(Java/Python):将语句逐条翻译为机器指令并立即执行,不生成目标文件
举个例子:GCC+Linux下编译hello.c
支持程序开发和运行的环境由系统软件提供
最重要的系统软件是操作系统和语言处理系统
💡 系统软件区别于应用软件,如文字处理程序(word等)属于应用软件
-
语言处理系统:语言处理程序(编辑器、编译程序/解释程序)+运行时系统(库函数、调试、优化等)
-
操作系统:GUI、CUI
语言处理系统运行在操作系统上,操作系统用指令管理硬件。
1.4 计算机系统层次结构
-
机器语言编写
应用程序→指令集体系结构→计算机硬件
-
汇编语言编写
应用程序→汇编程序→操作系统→指令集体系结构→计算机硬件
-
高级语言编写
应用程序→语言处理系统→操作系统→指令集体系结构→计算机硬件
-
指令集体系结构(Instruction Set Architecture, ISA)
ISA是一种规约,规定了如何使用硬件:
- 可执行指令的集合(include 指令格式、操作种类)
- 指令可接受的操作数类型
- 操作数能存放的寄存器组的结构
- 操作数能存放的存储空间的大小和编址方式
- 操作数存放时按大端还是小端
- ……
没有ISA,软件无法使用硬件
不同的ISA规定的指令集不一样,如IA-32、MIPS、ARM等
同一种ISA可以有不同的计算机组成,如乘法指令可用ALU或乘法器实现