计算机系统基础 - 为什么要学习计算机基础

用系统思维分析问题

例子1

  • ISO C90标准下, 在32位系统上

  • 以下C表达式的结果是什么
    - 2147483648 < 2147483648

  • 执行结果为 : false

  • 以下关系表达式的结果为 : True
    int i = -2147483648;
    i < 2147483648

为什么 ?, 编译器如何处理字面量 ?

例子2

sum(int a[], unsigned len)
{
	int i, sum = 0;
	for (i = 0; i <= len-1; i++)
		sum += a[i]
	return sum;
}
  • 这段代码的意思是 :

    • 一个数组, 有len个元素, 把所有元素进行累加, 作为返回值.
  • 当参数len为0时, 在机器上执行时, 会报错访存异常.

  • 当len为int型时, 则返回0

为什么 ?, 高级语言中的运算规则是什么 ?

例子3

  • 若x和y为int型, 当 x = 65535时, y = x * x; y 的值为多少?
  • y = -131071.

为什么 ?

例子4

main.c

int d = 100;
int x = 200;
int main()
{
	p1();
	printf("d=%d, x=%d\n", d,x);
	return 0;
}

p1.c

double d;
void p1()
{
	d=1.0;
}
  • d = 0, x = 1072693248

为什么 ?

例子5

#include <stdio.h>
main()
{
	double a = 10;
	printf("a = %d\n", a);
}
  • 在IA-32上运行时, 打印结果为0
  • 在x86-64上运行时, 打印出来的a是一个不确定值

为什么 ?

  • 浮点数在机器中是如何表示的
  • 浮点指令是什么样子的
  • 浮点数的体系结构是什么
  • 过程调用的参数传递

冯 · 诺依曼结构计算机采用存储程序工作方式

  • 任何要计算机完成的工作都要先被编写成程序, 然后将程序和原始数据送入主存并启动执行.

冯 · 诺依曼结构是怎样的

  • 应该有个主存, 用来存放程序和数据
  • 应该有一个自动逐条取出指令的部件
  • 应该有具体执行指令的部件
  • 程序由指令构成
  • 指令描述如何对数据进行处理
  • 应该有将程序和原始数据输入计算机的部件
  • 应该有将运算结果输出计算机的部件
    在这里插入图片描述

冯 · 诺依曼结构的主要思想

  • 计算机应由运算器, 控制器, 存储器, 输入设备和输出设备五个基本部件组成

  • 各基本部件的功能是 :

    • 存储器 : 存储数据和指令, 计算机应能区分数据还是指令
    • 控制器 : 自动取出指令来执行.
    • 运算器 : 能进行加减乘除四种基本算术运算, 并且也能进行一些逻辑运算和附加运算.
    • 操作人员可以通过输入设备, 输出设备和主机进行通信
  • 内部以二进制表示指令和数据.

    • 每条指令有操作码和地址码两部分组成.
      • 操作码指出操作类型
      • 地址码指出操作数的地址.

现代计算机结构模型

在这里插入图片描述

  • CPU : 中央处理器

  • PC : 程序计数器

  • MAR : 存储器地址寄存器

  • ALU : 算术逻辑部件

  • IR : 指令寄存器

  • MDR : 存储器数据寄存器

  • GPRs : 通用寄存器组

  • 存储器 : 存储器划分为一个一个的存储单元, 每个存储单元有各自的编号

  • ALU : 算术逻辑部件, 相当于冯诺依曼中的控制器.

    • 送到ALU里面的数据可以是寄存器里的数据, 也可以是存储器里面的数据.
    • 计算出来的结果可以继续放到某个寄存器里面. 也可以通过总线放到存储器里面
  • MDR : 寄存器里面的数据可以通过MDR送到存储器, 存储器里面的数据也可以通过MDR送到寄存器

  • 运算的结果除了直接产生的数据以外, 还有一些标志信息 (比如运算结果得到的符号, 有没有进位, 有没有溢出)

    • 这些标志信息可以送到控制器里面, 影响后续指令的执行.
  • PC : 如果执行到这条指令, 这条指令的地址是送到一个专门的寄存器PC里面.

  • MAR : 指令的地址要先送到地址寄存器MAR里面. 然后通过总线送到存储器

    • 操作数的地址也要通过MAR送到存储器.
  • IR : 指令取过来送到控制器执行的时候, 先要放到一个指令寄存器IR里面

  • 指令寄存器里面的操作码字段会送到控制器去进行译码

CPU和存储器是通过总线相连的

计算机是如何工作的

使用现实生活中的做饭举例说明

  • 厨房 - CPU

  • 做饭的人 - 控制器

  • 盘 - GRPs

  • 锅灶等 - ALU

  • 架子 - 存储器 , 原料都放在这里

  • 做菜前

    • 原材料 (数据) 和菜谱 (指令) 都按序放在厨房外的架子 (存储器), 每个架子有编号 (存储单元地址).
    • 菜谱 : 原料位置, 做法, 做好的菜放在哪里等.
      • 例如, 把10, 11号架上的原料一起炒, 并装入3号盘
      • 这相当于一条指令, 把10号单元和11号单元的数据相加, 加起来后放到某个寄存器里面
    • 告诉做菜的人从第5个架上(起始PC=5)指定菜谱开始做
    • 相当于告诉CPU从主存单元里面取指令执行指令.
  • 开始做菜

    • 第一步 : 从5号架上取菜谱 (根据PC取指令)
    • 第二步 : 看菜谱 (指令译码)
    • 第三步 : 从架上或盘中取原材料 (取操作数)
    • 第四步 : 洗, 切, 炒等具体操作 (指令执行)
    • 第五步 : 装盘 (回写结果)
    • 第六步 : 算出下一菜谱所在架子号6 = 5 + 1 (修改PC的值)

程序由指令组成

  • 程序在执行前
    • 数据和指令事先存放在存储器中, 每条指令和每个数据都有地址, 指令按序存放, 指令有OP, ADDR字段组成, 程序起始地址置PC
    • OP : 操作码字段
      在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值