计算机体系结构_Introduction to CSAPP(一)计算机体系结构与程序员的视角

C程序的执行

我们对于C程序,有这么一套代码:

 #include <stdio.h>
 int main(){
   printf("hello worldn");
   return 0;
 }

我们知道,对于一个高级C语言程序来说,要在在机器上运行它需要将每条C语句转化成一系列第几的机器语言指令,然后将这些指令打包成为有固定格式的可执行目标程序,才能运行。而这个可执行目标程序一般以二进制磁盘文件的形式存放在硬盘中。所以可执行目标程序也叫可执行目标文件

转化的方法是对这个C语言程序文件进行编译。这个操作由编译器驱动程序完成。

转化的方法是对这个C语言程序文件进行编译。这个操作由编译器驱动程序完成。

 $ gcc -o hello hello.c

整个编译系统的过程如下:

8e4f4b1e37e0d8d09e74e3899382bda1.png

而运行该程序需要我们在shell中执行:

 $ ./hello
 # 以下是输出
 hello, world

而机器实际的工作如下图:

77bdba9482f64c408ff743dfc42b7175.png
1. 我们通过键盘输入命令 ./hello,shell程序将字符逐一读入寄存器,再把它放入内存中(主存储器)
2. 我们输入回车好,shell程序察觉到命令的结束,shell执行指令,从磁盘中加载可执行的 hello文件,并将目标文件的代码与数据(“hello, worldn”)复制到主存中。
3. 目标文件加载到主存后,处理器开始执行 hello文件的机器语言指令,这些指令将“hello, worldn”从主存复制到寄存器,再从寄存器复制到显示设备,即屏幕上。

机器指令与系统架构

  • 什么是计算机指令集?指令集架构?

计算机体系结构中,计算机指令集(ISA)位于操作系统和硬件之间。计算机指令集是计算机硬件所能执行的操作&命令的直接体现,是计算机硬件可以理解、可以直接运行的命令。我们通过运行特定指令,驱使计算机进行工作。

在学习CSAPP时,我们会发现,CSAPP的第二版针对的是IA32的系统,而第三版则全面支持了x86-64。这里的IA32与x86-64指的就是不同的指令集架构,不同的指令集,对应了不同的计算机指令。

  • 什么是处理器架构?

处理器架构简单的说就是硬件的架构,描述了一众计算机硬件如何组织才可以进行运算。而计算机指令集决定了处理器的架构。为了实现指令集才采取的硬件电路所采取的架构就是处理器架构。

  • 什么是汇编语言?

在C语言编译的时候,我们会发现在中间步骤,可以看到汇编代码。汇编语言其实是计算机指令集的可视化写法,是助记符,和指令集基本上可以一一对应起来。所以我们可以看到,汇编是有不同的版本的,比如x86的汇编用于微机,单片机的汇编是8051版本,ARM的汇编有v4版本的。

换句话说,不同的计算机指令集有不同的汇编语言。

要设计处理器,首先就需要有指令集,规定处理器相应操作,通过指令集去控制处理器实现相应功能。但处理器是一堆硬件电路,只能识别二进制数据,所以指令集是由一堆二进制数据组成。而二进制数据对人类来说读起来很麻烦。为了方便人类操作指令集,发明了汇编语言来描述指令集。汇编语言类似人类语言,读起来方便多了。
处理器架构、指令集和汇编语言,三者有何关系?​www.zhihu.com

在计算机体系结构中,计算机指令的位置位于操作系统与硬件之间。ISA为操作系统提供了操作硬件的能力。

609994d55b3aeb5a2878c54a4744d9cd.png

计算机是如何工作的

我们可以将计算机的工作类比为做菜

  • 做菜前:原材料(数据)和菜谱(指令)都按序放在厨房(CPU)外的菜架(存储器)上,架子的每一层,都有编号(存储单元地址)。
  • 菜谱:菜谱定义了原料(数据)的位置(存储单元地址)、做法(指令操作含义)、做好的菜放哪里(目的操作数地址
    • 其中数据可以是立即数(可以理解为一个字面量的数)、寄存器编号存储地址
    • 目的操作数地址可以是寄存器编号存储地址
e.g. 把10号11号的原料一起炒,并装入10号盘( add #10 #11
  • 开始动作:我们可以告诉厨房,从第五个架上(起始PC=5)的菜谱开始做
  • 做菜:
  1. 从5号架上取菜谱(根据PC取指令
  2. 看菜谱指令译码
  3. 从架上或盘中取原材料取操作数
  4. 洗、切、炒等具体操作指令执行
  5. 装盘或直接送桌回写结果
  6. 算出下一个菜谱所在的架子号6=5+1修改PC的值
  7. 按照1做下一道菜执行下一条命令
知乎的编辑器真的难用。。。为什么不支持全部的markdown呢。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值