🌳
文章目录
记得有一首歌《推开 UNIX 的门》。 UNIX 换成 “世界”…🍋
文章中穿插了一些个人的理解,特别是绿色字体部分,如有笔误,烦请留言。
下一篇文章地址链接: 《【计算机与汇编原理②】——存储器系统【RAM ROM 高速缓冲存储器Cache】》.
一、计算机中的数制及转换:
1、计算机中的数制
● 数制:用来区分 数字大小不同 的一种表示方法。而且每一种进制里面都存在一种计算规则,比如十进制就是“逢十进一,借一当十”。
(1)十进制、二进制、十六进制、八进制
①十进制:日常习惯的一种表示,在编写程序的输入输出时使用较多。 “逢十进一,借一当十”
在汇编语言编程中,十进制数直接表示。举个栗子,
(
150
)
10
(150)_{10}
(150)10 或
(
150
)
D
(150)_{D}
(150)D 在汇编语言里面表示为
150
150
150 ,真实世界的大小也为
150
150
150。【注:
D
D
D 是
D
e
c
i
m
a
l
Decimal
Decimal 的缩写】
②二进制:计算机内部信息存储的一种表示,其运算、输入/ 输出都是二进制数。 “逢二进一”
在汇编语言编程中,二进制数用 “XXXX B” 表示。举个栗子,
(
01000101
)
2
(01000101)_{2}
(01000101)2 或
(
01000101
)
B
(01000101)_{B}
(01000101)B 在汇编语言里面表示为
01000101
B
01000101B
01000101B ,真实世界的大小为
69
69
69,计算规则和过程如下。【注:
B
B
B 是
B
i
n
a
r
y
Binary
Binary 的缩写】
(
01000101
)
2
=
0
×
2
7
+
1
×
2
6
+
0
×
2
5
+
0
×
2
4
+
0
×
2
3
+
1
×
2
2
+
0
×
2
1
+
1
×
2
0
=
64
+
4
+
1
=
69
(01000101)_{2}=0 \times 2^7+1 \times 2^6+0 \times 2^5+0 \times 2^4+0 \times 2^3+1 \times 2^2+0 \times 2^1+1 \times 2^0=64+4+1=69
(01000101)2=0×27+1×26+0×25+0×24+0×23+1×22+0×21+1×20=64+4+1=69
③十六进制数:当一串二进制数很长时,书写、阅读不方便,常改用等值的十六进制数表示。“逢十六进一,借一当十六”。而且用十六进制来表述计算机里面的数据,比起二进制,可以节省更多的资源空间。
在汇编语言编程中,16进制数用 “XXXX H” 表示。举个栗子,
(
55
)
16
(55)_{16}
(55)16 或
(
55
)
H
(55)_{H}
(55)H 在汇编语言里面表示为
55
H
55H
55H ,真实世界的大小为
85
85
85。
(
F
F
F
F
)
16
(FFFF)_{16}
(FFFF)16 或
(
F
F
F
F
)
H
(FFFF)_{H}
(FFFF)H 在汇编语言里面表示为
F
F
F
F
H
FFFFH
FFFFH ,真实世界的大小为
65535
65535
65535【注:
H
H
H 是
H
e
x
a
d
e
c
i
m
a
l
Hexadecimal
Hexadecimal 的缩写】
注:
(
F
F
F
F
)
16
=
15
×
1
6
3
+
15
×
1
6
2
+
15
×
1
6
1
+
15
×
1
6
0
=
65535
(FFFF)_{16}=15 \times 16^3+15 \times 16^2+15 \times 16^1+15 \times 16^0=65535
(FFFF)16=15×163+15×162+15×161+15×160=65535
④八进制数:在微型(计算)机中一般不采用八进制数。但数字电路、计算机组成原理课程中对它都有所讲解。表示规则和前面三种类似。
(2)BCD码
那问题来了,我们在现实生活中习惯了用十进制表示数字,但计算机更喜欢用二进制表示,那么计算机怎么协调两者之间的差异的呢?
在计算机中表示十进制数的方法是用 四位二进制数 代表 一位十进制数 ,又称BCD码。
BCD码有多种形式,最常用的是8421BCD码,它是用 4位二进制数 对 1位十进制数 的每一位进行编码,这 4位二进制码的值 就是被编码的 1位十进制数的值 。示意图如下:
2、计算机中的数制转换
(1)二、八、十六进制数→十进制数
算法:每位数字和该位的权值相乘,再累加求和。
如:
(
1101.11
)
2
=
(
?
)
10
(1101.11)_2=(?)_{10}
(1101.11)2=(?)10
解:
1
×
2
3
+
1
×
2
2
+
0
×
2
1
+
1
×
2
0
+
1
×
2
-
1
+
1
×
2
-
2
1×2^3+1×2^2+ 0×2^1 + 1×2^0+1×2^{-1}+1×2^{-2}
1×23+1×22+0×21+1×20+1×2-1+1×2-2
=
8
+
4
+
0
+
1
+
0.5
+
0.25
= 8 + 4 + 0 + 1 + 0.5 + 0.25
=8+4+0+1+0.5+0.25
=
(
13.75
)
10
=(13.75 )_{10}
=(13.75)10
如:
(
29
A
F
)
16
=
(
?
)
10
(29AF)_{16} = ( ? )_{10}
(29AF)16=(?)10
解:
2
×
1
6
3
+
9
×
1
6
2
+
10
×
1
6
1
+
15
×
1
6
0
2×16^3+9×16^2+ 10×16^1+ 15×16^0
2×163+9×162+10×161+15×160
=
8192
+
2304
+
160
+
15
= 8192 + 2304 + 160 + 15
=8192+2304+160+15
=
(
10671
)
10
=(10671)_{10}
=(10671)10
(2)二进制数→十六进制数
算法:四位二进制数为一组,每组用等值的十六进制替换。
如: ( 101011.11 ) 2 = ( 10 , 1011.1100 ) 2 = ( 2 B . C ) 16 (101011.11)_{2}=(10,1011.1100)_{2} =(2B.C)_{16} (101011.11)2=(10,1011.1100)2=(2B.C)16
(3)十六进制数→二进制数
算法:一位十六进制数用等值的四位二进制数替换。
如: ( 17 E . 58 ) 16 = ( 0001 , 0111 , 1110.0101 , 1000 ) 2 (17E.58)_{16}=(0001,0111,1110.0101,1000)_{2} (17E.58)16=(0001,0111,1110.0101,1000)2
(3)十进制数→二进制数
① 十进制整数→二进制数
算法:除2取整,直到商为零为止,将余数倒叙输出。
如:
(
11
)
10
=
(
?
)
2
(11)_{10} = ( ? )_{2}
(11)10=(?)2
所以, ( 11 ) 10 = ( 1011 ) 2 (11)_{10}=(1011)_2 (11)10=(1011)2
② 十进制小数→二进制数
算法:乘2取整,直到乘积的小数部分为0时止,再将整数部分顺序输出。
如:
(
0.8125
)
10
=
(
?
)
2
(0.8125)_{10} = ( ? )_{2}
(0.8125)10=(?)2
所以, ( 0.8125 ) 10 = ( 0.1101 ) 2 (0.8125)_{10}=(0.1101)_2 (0.8125)10=(0.1101)2
二、计算机中数据的编码(包含 码制 内容)
1、非数值型信息编码方法(ASCII码)
在计算机中除了数值之外,还有一类非常重要的数据,那就是字符。
计算机常用的输入/输出设备有键盘、显示器、打印机,它们处理的数都是人熟悉的字符,有英文的大小写字母,数字符号(0,1,…, 9)以及其他常用符号(如:“,”、“。”、“%”、“@” 等)。
在计算机中,这些字符都是用二进制编码的形式表示,每一个字符被赋予一个唯一固定的二进制编码。 目前,一般都是采用美国标准信息交换码(ASCII)。
它使用七位二进制编码来表示一个字符。由于用七位码来表示一个字符,故该编码方案中共有128个符号 ( 2 7 = 128 ) (2^7=128) (27=128) 。
举个两个栗子:
键入“1”,实际写入键盘存储区的是
(
31
)
16
(31)_{16}
(31)16【即
(
49
)
10
(49)_{10}
(49)10,即
(
0011
,
0001
)
2
(0011,0001)_2
(0011,0001)2】
键入“A”, 实际写入键盘存储区的是
(
41
)
16
(41)_{16}
(41)16【即
(
65
)
10
(65)_{10}
(65)10,即
(
0100
,
0001
)
2
(0100,0001)_2
(0100,0001)2 】
重点补充,汇编语言中要牢记以下18个字符的ASCII码:⭐️ ⭐️ ⭐️
①0~9的ASCII码为:
(
30
)
16
(30)_{16}
(30)16~
(
39
)
16
(39)_{16}
(39)16 ,即
30
H
30H
30H~
39
H
39H
39H
②A~F的ASCII码为:
(
41
)
16
(41)_{16}
(41)16~
(
46
)
16
(46)_{16}
(46)16 ,即
41
H
41H
41H~
46
H
46H
46H
③回车符的ASCII码为:
(
0
D
)
16
(0D)_{16}
(0D)16, 即
0
D
H
0DH
0DH
④换行符的ASCII码为:
(
0
A
)
16
(0A)_{16}
(0A)16, 即
0
A
H
0AH
0AH
2、数值型信息编码方法(也称 码制)
● 码制:用来在微型计算机机领域中区分 有符号数 的一种表示方式。
补充:计算机只能识别0和1组成的 数或代码,全部符号数的字符也只能用0和1来表示。
(1)真值、机器数、字长
真值:用“+”表示正数,用“-”表示负数。
例如:“+00000101” 表示 “+5” ,“-00000101” 表示 “-5”
机器数:把二进制数的最高位定义为符号位,其余位为数值位。符号位为 0 表示正数,符号位 1 表示负数。符号位和数值位在一起表示一个数,称为机器数。如下图所示:
例如:“00000101” 表示 “5” ,“10000101” 表示 “-5”
字长:计算机在同一时间内处理二进制数的位数。对有符号数来讲,字长指包括符号位在内,一个二进制数占有的位数。
如:字长
n
=
8
n=8
n=8 的二进制数,除了符号位,数值部分为 7 位。
(2)原码、补码、反码、移码
● 由于数值部分的表示方法不同,有符号数可有三种表示方法,即机器数有三种形式,分别叫做原码、反码和补码。最后我再补充移码的概念。
原码表示的有符号数,最高位为符号位,数值位部分就是该数的绝对值。
例如:假设某机器为8位机,即一个数据用8位 (二进制)来表示。
则: +2(即2H) 的原码机器数为 00000010;-23(即-17H)的原码机器数为 10010111
其中最高位是符号位,后7位是数值位。
x
=
+
5
x=+5
x=+5 字长为 8 位的原码机器数为
[
x
]
原
=
0
0000101
[x]_原=0\,0000101
[x]原=00000101
x
=
−
5
x=-5
x=−5 字长为 8 位的原码机器数为
[
x
]
原
=
1
0000101
[x]_原=1\,0000101
[x]原=10000101
x
=
+
0
x=+0
x=+0 字长为 8 位的原码机器数为
[
x
]
原
=
0
0000000
[x]_原=0\,0000000
[x]原=00000000
x
=
−
0
x=-0
x=−0 字长为 8 位的原码机器数为
[
x
]
原
=
1
0000000
[x]_原=1\,0000000
[x]原=10000000
反码表示的也是有符号数,反码通常是用来由原码求补码或者由补码求原码的过渡码。反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。(即1变0,0变1)。
例如:+5 的反码机器数为 00000101
-23 的反码机器数为 11101000
x
=
+
5
x=+5
x=+5 字长为 8 位的反码机器数为
[
x
]
反
=
0
0000101
[x]_反=0\,0000101
[x]反=00000101
x
=
−
5
x=-5
x=−5 字长为 8 位的反码机器数为
[
x
]
反
=
1
1111010
[x]_反=1\,1111010
[x]反=11111010
x
=
+
0
x=+0
x=+0 字长为 8 位的反码机器数为
[
x
]
反
=
0
0000000
[x]_反=0\,0000000
[x]反=00000000
x
=
−
0
x=-0
x=−0 字长为 8 位的反码机器数为
[
x
]
反
=
1
1111111
[x]_反=1\,1111111
[x]反=11111111
补码表示的有符号数,对于正数来说同原码、反码一样,但为负数时,它的数值位部分为原码的绝对值按位取反后末位加 1 。
例如:+23 的补码为 00010111
-23 的原码为 10010111
-23 的反码为 11101000
-23 的补码为 11101001
补
码
=
{
原
码
(
也
等
于
反
码
)
,
当
表
示
正
数
时
反
码
+
1
,
当
表
示
负
数
时
补码=\begin{cases}原码(也等于反码)&,当表示正数时\\反码+1&,当表示负数时\end{cases}
补码={原码(也等于反码)反码+1,当表示正数时,当表示负数时
x
=
+
5
x=+5
x=+5,字长为 8 位的补码机器数为
[
x
]
补
=
0
0000101
[x]_补=0\,0000101
[x]补=00000101
x
=
−
5
x=-5
x=−5,字长为 8 位的补码机器数为
[
x
]
补
=
1
1111011
[x]_补=1\,1111011
[x]补=11111011
x
=
+
0
x=+0
x=+0,字长为 8 位的补码机器数为
[
x
]
补
=
0
0000000
[x]_补=0\,0000000
[x]补=00000000
x
=
−
0
x=-0
x=−0,字长为 8 位的补码机器数为
[
x
]
补
=
0
0000000
[x]_补=0\,0000000
[x]补=00000000
补码,反码都可以简化运算。
但由于反码运算有循环进位问题。而补码只有一个 0,且运算更简便,所以为计算机内部常用。况且,你可以发现,+0 和 -0 的补码机器数是一样的,而反码不一样。
移码:也是表示有符号数的,主要是用来针对数的比较大小的。
比如说,你要比较 -1 和 1 的大小
在计算机中,它俩分别“1000 0001”和“0000 0001”的形式(假设 8 位字长)存储。
如果按照正常思路,一位一位地进行比较,那将得出 1000 0001 > 0000 0001,但显然这样不对。所以移码的作用就来了。
移码怎么计算:
移
码
=
补
码
的
符
号
位
取
个
反
移码 = 补码的符号位取个反
移码=补码的符号位取个反
举个栗子: -1 的补码是 “1111 1111” ,那他的移码是“0111 1111”。而 1 的补码是“0000 0001” ,那他的移码是 “1000 0001” 现在比较大小的话,显然,0111 1111 小于 1000 0001,即 -1 < 1 。
(3)有符号数和无符号数
● 计算机处理的数据,包括有符号数和无符号数两类。有符号数用补码表示,其最高位代表符号。
问:什么是无符号数?
答:无符号数是相对于有符号数而言的。无符号数的最高位不代表符号,而是数值的一部分。
一个数是无符号数,还是有符号数,其物理意义是由程序员定义的。 即:存放在计算机内部的一个数,其最高位实际表示符号位还是数值位,由程序员决定。因此在对其操作时,需要相应使用正确的针对有符号数或无符号数操作的指令。
比如:数 N = ( 1111 , 1111 ) 2 N=(1111,1111)_2 N=(1111,1111)2 ,若它是有符号补码数,则其值为 “-1” ;若它是无符号数,则其值为 “255”。
小 结 : { ① 机 器 数 比 真 值 数 多 一 个 符 号 位 ② 正 数 的 原 、 反 、 补 码 与 真 值 数 相 同 ③ 负 数 原 码 的 数 值 部 分 与 真 值 数 相 同 ; 负 数 反 码 的 数 值 部 分 为 真 值 数 按 位 取 反 ; 负 数 补 码 的 数 值 部 分 为 真 值 数 按 位 取 反 末 位 加 1 ④ 没 有 负 零 的 补 码 , 或 者 说 负 零 的 补 码 与 正 零 的 补 码 相 同 ⑤ 由 于 补 码 表 示 的 机 器 数 更 适 合 运 算 , 为 此 , 计 算 机 系 统 中 负 数 一 律 用 补 码 表 示 ⑥ 机 器 数 的 数 值 范 围 ( 设 机 器 数 字 长 = n 位 , 用 来 表 示 整 数 ) { 原 码 的 真 值 范 围 为 − ( 2 n − 1 − 1 ) ~ + ( 2 n − 1 − 1 ) 反 码 的 真 值 范 围 为 − ( 2 n − 1 − 1 ) ~ + ( 2 n − 1 − 1 ) 补 码 的 真 值 范 围 为 − 2 n − 1 ~ + 2 n − 1 − 1 无 符 号 数 的 真 值 范 围 为 0 ~ + 2 n − 1 小结:\begin{cases}①机器数比真值数多一个符号位\\ ②正数的原、反、补码与真值数相同\\ ③负数原码的数值部分与真值数相同;负数反码的数值部分为真值数按位取反; 负数补码的数值部分为真值数按位取反末位加1\\ ④没有负零的补码,或者说负零的补码与正零的补码相同\\ ⑤由于补码表示的机器数更适合运算,为此,计算机系统中负数一律用补码表示\\ ⑥机器数的数值范围(设机器数字长=n位,用来表示整数)\begin{cases}原码的真值范围为 -(2^{n-1} -1) \,\,~ \, +(2^{n-1}-1)\\反码的真值范围为 -(2^{n-1} -1) \,\,~ \, +(2^{n-1}-1)\\补码的真值范围为 -2^{n-1} \,\,~ \, +2^{n-1} -1\\无符号数的真值范围为 \, \, 0 \, \,~ \, +2^n -1 \end{cases} \end{cases} 小结:⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧①机器数比真值数多一个符号位②正数的原、反、补码与真值数相同③负数原码的数值部分与真值数相同;负数反码的数值部分为真值数按位取反;负数补码的数值部分为真值数按位取反末位加1④没有负零的补码,或者说负零的补码与正零的补码相同⑤由于补码表示的机器数更适合运算,为此,计算机系统中负数一律用补码表示⑥机器数的数值范围(设机器数字长=n位,用来表示整数)⎩⎪⎪⎪⎨⎪⎪⎪⎧原码的真值范围为−(2n−1−1)~+(2n−1−1)反码的真值范围为−(2n−1−1)~+(2n−1−1)补码的真值范围为−2n−1~+2n−1−1无符号数的真值范围为0~+2n−1
对于 ⑥ 举两个栗子:
设:8 位补码数为1000,0000~ 0111,1111
则:十进制真值数为 -128~+127
设:16 位补码数为
1000,0000,0000,0000~0111,1111,1111,1111
则:十进制真值数为 -32768~+32767
补充知识:在计算机中数据用补码表示,因为补码可以统一符号位与数值位的运算,同时解决了+0、-0 问题,并将空出来的二进制原码 1000 0000 (原码的 “1000 0000” 表示 “-0” )表示为 -128,这也符合自身逻辑意义的完整性。因此八位二进制数表示范围为-128 ~ +127。
(4)溢出和进位
● 进位:运算后,最高位向更高位的进位值。
● 溢出:运算结果超出了运算器所能表示的范围。
<1> 计算机内部判断溢出的方法(溢出判断电路实现):
首先:
① 计算机一律把操作数看成是有符号数
②最高位的进位值保存在 “进位标志寄存器” 中,有进位则进位标志为1 (即CF = 1,其中 “CF” 来自于 “Carry full adder” )
③加数,被加数的最高位相同,且和结果的最高位相异,则溢出标志为1(即OF = 1,其中 “OF” 来自于 “Overflow full adder”)
假设:
[
X
]
补
=
X
n
−
1
X
n
−
2
X
n
−
3
…
X
0
[X]_补= X_{n-1}X_{n-2}X_{n-3}…X_0
[X]补=Xn−1Xn−2Xn−3…X0
[
Y
]
补
=
Y
n
−
1
Y
n
−
2
Y
n
−
3
…
Y
0
[Y]_补=Y_{n-1}Y_{n-2}Y_{n-3}…Y_0
[Y]补=Yn−1Yn−2Yn−3…Y0
现在我们要计算
X
+
Y
=
?
X + Y = \,\,?
X+Y=?
[
Z
]
补
=
[
X
]
补
+
[
Y
]
补
=
Z
n
−
1
Z
n
−
2
Z
n
−
3
…
Z
0
[Z]_补=[X]_补+[Y]_补 = Z_{n-1}Z_{n-2}Z_{n-3}…Z_0
[Z]补=[X]补+[Y]补=Zn−1Zn−2Zn−3…Z0
其中
X
n
−
1
X_{n-1}
Xn−1,
Y
n
−
1
Y_{n-1}
Yn−1,
Z
n
−
1
Z_{n-1}
Zn−1 分别表示加数、被加数、和的符号位。( 其中
n
=
8
n = 8
n=8 )
分别用
X
s
X_s
Xs、
Y
s
Y_s
Ys、
Z
s
Z_s
Zs表示,则
O
F
=
X
s
⋅
Y
s
⋅
Z
s
‾
+
X
s
‾
⋅
Y
s
‾
⋅
Z
s
OF = X_s·Y_s ·\overline{Z_s} + \overline{X_s} ·\overline{Y_s} ·Z_s
OF=Xs⋅Ys⋅Zs+Xs⋅Ys⋅Zs
<2> 程序员判断溢出的方法:
如果参与运算的数是无符号数,则判断进位标志。若进位标志=1,表示溢出。
如果参与运算的数是有符号数,则判断溢出标志。若溢出标志=1,表示溢出。
例1:
两个字长 n = 8 n=8 n=8 的数相加,“和” 的红色部分CF=0表示进位,“和” 的蓝色部分用于计算溢出位。【 O F = 0 ⋅ 0 ⋅ 1 ‾ + 0 ‾ ⋅ 0 ‾ ⋅ 1 = 1 OF=0·0·\overline{1}+\overline{0}·\overline{0}·1=1 OF=0⋅0⋅1+0⋅0⋅1=1】
若加数、被加数为无符号数,因为CF=0,则结果 = 10100101 = 165 (
√
√
√ )
若加数、被加数有符号数,因为OF=1,则结果 = -91 (
×
×
× )
例2:
若加数、被加数为无符号数,因为 CF=1,则结果 = 91 (
×
×
× )
若加数、被加数有符号数,因为 OF=1,则结果 = +91 (
×
×
× )
【
O
F
=
1
⋅
1
⋅
0
‾
+
1
‾
⋅
1
‾
⋅
0
=
1
OF=1·1·\overline{0}+\overline{1}·\overline{1}·0=1
OF=1⋅1⋅0+1⋅1⋅0=1】
三、微型计算机系统的基本组成
1、微型计算机的系统组成
● 硬件:泛指设备而言。
● 软件:泛指程序而言。
● 微型计算机的系统简称 “微机系统”,由微型计算机、显示器、输入输出设备、电源及控制面板等组成的计算机系统。配有操作系统、高级语言和多种工具性软件等。
计算机组成的五大部件:
①控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
②运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
③存储器(Memory):存储器的功能是存储程序、数据和命令等信息,并在需要时提供这些数据。
④输入设备(Input system):输入设备的作用是将程序、控制命令等数据信息输入到计算机。常见的输入设备有键盘、鼠标等。
⑤输出设备(Output system):输出设备的作用是将程序结果、数据符号等数据信息输出出来。常见的输出设备有显示屏、打印机等。
补充:输入设备与输出设备合你为外部设备,简称外设。
2、微型机的软件结构
泛指程序而言:
系统软件(操作系统,程序设计语言及其编辑、编译软件……)
应用软件:为解决某一实际问题而编制的软件
3、微型机的硬件结构
①CPU:即微处理器,是超大规模集成电路,内部集成了运算器、控制器、寄存器组,存储器管理部件
②存储器:也称内存或主存,用来存放程序、数据,在《存储器系统》章节将进行详细讲解。
③I/O接口:是CPU和外部设备交换信息的“中转站”。
④I/O设备:如键盘、鼠标、显示器、打印机。
⑤总线:总线是CPU与存储器、I/O接口交换信息的公共通道。
按总线上信息传输的物理意义,
总
线
分
为
:
{
地
址
总
线
:
用
于
传
输
C
P
U
的
地
址
信
号
并
访
问
存
储
器
或
访
问
I
/
O
端
口
的
地
址
信
号
数
据
总
线
:
用
于
传
输
C
P
U
的
数
据
、
读
/
写
内
存
数
据
、
读
写
I
/
O
端
口
数
据
控
制
总
线
:
用
于
传
输
C
P
U
发
出
的
控
制
命
令
、
接
受
外
部
向
C
P
U
提
出
的
请
求
总线分为:\begin{cases}地址总线: 用于传输CPU的地址信号并访问存储器或访问I/O端口的地址信号\\数据总线: 用于传输CPU的数据、读/写内存数据、读写I/O端口数据 \\ 控制总线: 用于传输CPU发出的控制命令、接受外部向CPU提出的请求 \end{cases}
总线分为:⎩⎪⎨⎪⎧地址总线:用于传输CPU的地址信号并访问存储器或访问I/O端口的地址信号数据总线:用于传输CPU的数据、读/写内存数据、读写I/O端口数据控制总线:用于传输CPU发出的控制命令、接受外部向CPU提出的请求
补充:“AB” 是 “Address bus” 的缩写。“DB” 是 “Data bus” 的缩写。“CB” 是 “Control bus” 的缩写。
“读”:即输入,信息从外部→CPU。“写”:即输出,信息从CPU→外部。“读内存”:从存储器某单元取信息→CPU。“写内存”:信息写入存储器某单元。
地址总线通常是单向总线,数据总线通常是双向总线,大部分控制线是单向,少数是双向。 图中只花了 “3条” 是习惯画法,其实每一条都有若干根。为了灵活地扩展系统的功能,总线在主板上通过总线扩展插槽向外引出,在《总线》章节将进行详细讲解。
4、计算机的工作过程
工作环境:程序由多条有逻辑关系的指令组成,指令的长度不等(一般为1~4字节),指令是程序员发出的,计算机能识别的,通知CPU执行某种操作的命令。
• 计算机的工作就是逐条执行由指令构成的程序。
• 程序和数据均以二进制代码的形式不加区别地存放在存储器中,存放位置由地址指定,地址码也是二进制形式。
工作过程:计算机按程序的流程自动地连续取出指令并执行之。
• 为实现自动连续地执行程序,控制器中设置了一个程序计数器PC,它可根据指令的长度自动增量(总是指向下一条指 令)。只要给出程序中第一条指令的地址,控制器就可依据存储程序中的指令顺序周而复始地取指令、译码、执行,直到完成全部指令操作为止,即控制器通过指令流的串行驱动实现程序控制。
核 心 步 骤 : { ① 取 指 令 ② 分 析 指 令 ③ 看 指 令 要 求 , 是 否 取 操 作 数 ④ 执 行 指 令 ⑤ 返 回 结 果 核心步骤:\begin{cases}①取指令\\ ②分析指令 \\③看指令要求,是否取操作数 \\④执行指令 \\ ⑤返回结果 \end{cases} 核心步骤:⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧①取指令②分析指令③看指令要求,是否取操作数④执行指令⑤返回结果
五、参考附录:
[1] 《微型计算机原理与接口技术(慕课板)》
清华大学出版社
[2] 《汇编语言程序设计(第2版)》
下一篇文章地址链接: 《【计算机与汇编原理②】——存储器系统【RAM ROM 高速缓冲存储器Cache】》.
正在施工中…🌳 🌳