计算机系统抽象层
操作系统/虚拟机
:包括操作系统,编译和链接等指令集体系结构(ISA)
:包括指令系统,机器码,汇编语言等微体系结构及硬件
:包括CPU的通用结构,层次结构存储系统等
冯.诺依曼结构计算机模型
C语言编译全流程及中间产物
1 | // hello.c |
我们把各种语言处理程序(如编译、汇编链接)和运行时系统(如库函数,调试、优化等功能)合称为语言处理系统
。
C语言Hello程序的数据流
在shell里执行./hello
时,数据流如下:
指令集体系结构(ISA)
- ISA:Instruction Set Architecture,即
指令集体系结构
,有时简称为指令系统。 - ISA 是一种规约(Specification),它规定了如何使用硬件。
- ISA 是计算机组成的抽象
- 不同 ISA 规定的指令集不同,如 IA-32、MIPS、ARM 等。
- 计算机组成必须能够实现 ISA 规定的功能,如提供 GPR 、标志、运算电路等。
- 同一种 ISA 可以由不同的计算机组成,如乘法指令可用 ALU 或乘法器实现。
补码的实质
补码的实质实际上是
模运算
。在一个模运算系统中,一个数与它除以“模”后的余数等价。eg:时钟是一种
模12系统
。现在钟表时针指向10点,要将它拨向6点,有两种拨法:- 顺拨8格:10 + 8 = 18 ≡ 6
- 倒拨4格:10 - 4 = 6
也就是:
10 - 4 ≡ 10 + 8
;-4 ≡ 8
。此时可以称8是-4对模12
的补码(即:-4的模12补码等于8)**一个负数的补码 等于
模 减去 该负数的绝对值
**。eg:上述中,模为12,负数为-4。所以负数-4的的补码为 12 - | -4 | = 8。
对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。
eg:模为12,某数取10,另一数取4。
所以,另一数负数为-4,另一数负数的补码为8,即:
10 - 4 ≡ 10 + 8
观察
10 - 4 ≡ 10 + 8
,发现减法竟然可以使用加法来进行代替。也即是说:补码实现了加法和减法的统一。
运算器只有有限位,假设为n位,则运算结果只能保留低n位,故可看成是个只有n档的二进制算盘,因此,其模为2^n。
求:负数的补码
- 法一:对应的正数,按位取反,然后加一。
- 法二:从右向左遇到第一个1前面的数按位取反。
eg:123 = 0111 1011B,求 -123
- 法一:1000 0100 + 1 = 1000 0101
- 法二:1000 0101
32位浮点数的表示范围
GB2312-80字符集
- 由三部分组成
- 字母、数字和各种符号,包括英文、俄文、日文平假名与片假名、罗马字母、汉语拼音等共687个
- 一级常用汉字,共3755个,按汉语拼音排列
- 二级常用汉字,共3008个,不太常用,按偏旁部首排列
- 汉字的区位码
- 码表由94行、94列组成,行号为区号,列号为位号,各占7位位号在右
- 指出汉字在码表中的位置,共14位,区号在左、
- 汉字的国标码
- 每个汉字的区号和位号各自加上32(20H),得到其
国标码
- 国标码中区号和位号各占7位。在计算机内部,为方便处理与存储,前面添一个0,构成一个字节
- 每个汉字的区号和位号各自加上32(20H),得到其
- 可在GB2312国标码的基础上产生
汉字内码
:为与ASCII码区别,将国标码的两个字节的第一位置“1”后得到一种汉字内码(可以有不同的编码方案)
字
和字长
的概念不同
字长
:指数据通路的宽度。等于 CPU 内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)数据通路
:指 CPU 内部数据流经的路径以及路径上的部件,主要是 CPU 内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致,才能相互匹配。字
:表示被处理信息的单位,用来度量数据类型的宽度。