计算机系统基础(一)笔记——Week1 计算机系统概述

本文最后更新于:2024年5月25日 凌晨

Week1 计算机系统概述

1.1 why learn?

举个例子1:

ISO C90标准下,32位系统运行以下C表达式

1
2
3
4
5
6
7
-2147483648<2147483647 
// false
int i=-2147483648;
i<2147483647
//true
-2147483647-1<2147483647
//how?

例子2:

1
2
3
4
5
6
7
8
sum(int a[],unsigned len)
{
int i,sum=0;
for(i=0;i<len-1;i++)
sum+=a[i];
return sum;
}
//len=0时发生访存异常,但int len则不会,why?

以及很多有趣的例子…但我懒得记

1.2 计算机系统基本组成与功能

  • 冯诺依曼结构
    • 计算机=运算器+控制器+存储器+输入设备+输出设备
    • 用二进制表示指令和数据,指令=操作码(指出操作类型)+地址码(指出操作数地址)
    • 采用存储程序工作方式
  • 现代计算机结构
    • 计算机=CPU(运算器+控制器)+存储器+I/O设备

Untitled

PC 程序计数器 IR 指令寄存器
MAR 存储器地址寄存器 MDR 存储器数据寄存器
ALU 算术逻辑部件 GPRs 通用寄存器组

程序如何执行的?

  • 程序执行前

    数据指令事先存放在存储器,每条指令和每个数据都有地址,指令按序存放,由OP、ADDR字段组成,程序起始地址由PC给出

  • 开始执行程序

    1. 根据PC取指令
    2. 指令译码
    3. 取操作数
    4. 指令执行
    5. 回写结果
    6. 修改PC的值

指令需给出的信息:

  1. 操作性质(操作码)
  2. 源操作数1 或/和 源操作数2(立即数、寄存器编号、存储地址)
  3. 目的操作数地址(寄存器编号、存储地址)

💡 存储地址的描述和操作数的数据结构有关

1.3 程序开发和执行过程简介

机器语言—>汇编语言—>高级程序设计语言

  • 机器语言

    01串组成

  • 汇编语言程序

    将汇编语言转换为机器语言,由汇编指令构成

    汇编指令:用助记符标号来表示的指令

    指令:包含操作码和操作数或其地址码

    (机器指令用二进制,汇编指令用符号)只能描述取/存一个数,两个数的加减乘除或与…

    1
    2
    3
    Ld M#,R#  (将存储单元内容装入寄存器)
    St R#,M# (将寄存器内容写入存储器)
    add B
  • 高级语言

    有两种方式转换为机器语言(编译/解释)

    • 编译程序(C/C++):将源程序转换为机器级目标程序,执行时启动目标程序
    • 解释程序(Java/Python):将语句逐条翻译为机器指令并立即执行,不生成目标文件

    举个例子:GCC+Linux下编译hello.c

    image-20240525000641681

支持程序开发和运行的环境由系统软件提供

最重要的系统软件是操作系统和语言处理系统

💡 系统软件区别于应用软件,如文字处理程序(word等)属于应用软件

  • 语言处理系统:语言处理程序(编辑器、编译程序/解释程序)+运行时系统(库函数、调试、优化等)

  • 操作系统:GUI、CUI

    语言处理系统运行在操作系统上,操作系统用指令管理硬件。

1.4 计算机系统层次结构

  • 机器语言编写

    应用程序→指令集体系结构→计算机硬件

  • 汇编语言编写

    应用程序→汇编程序→操作系统→指令集体系结构→计算机硬件

  • 高级语言编写

    应用程序→语言处理系统→操作系统→指令集体系结构→计算机硬件

  • 指令集体系结构(Instruction Set Architecture, ISA)

    ISA是一种规约,规定了如何使用硬件:

    1. 可执行指令的集合(include 指令格式、操作种类)
    2. 指令可接受的操作数类型
    3. 操作数能存放的寄存器组的结构
    4. 操作数能存放的存储空间的大小和编址方式
    5. 操作数存放时按大端还是小端
    6. ……

    没有ISA,软件无法使用硬件

    不同的ISA规定的指令集不一样,如IA-32、MIPS、ARM等

    同一种ISA可以有不同的计算机组成,如乘法指令可用ALU或乘法器实现


计算机系统基础(一)笔记——Week1 计算机系统概述
http://kcollision.github.io/2024/03afee5c61.html
作者
collision
更新于
2024年5月25日
许可协议