Download presentation
Presentation is loading. Please wait.
1
第二章 计算机中的信息表示 数值型数据 数据信息 非数值型数据 控制信息 指令信息等 本章类容: 1.数值数据的进位数值
2.带符号数的表示(原码、补码、反码、移码) 3.小数的表示(定点小数、浮点数) 4.字符表示方法 5.指令信息的表示(指令格式、寻址方法、功能分类)
2
第一节 数据信息的表示 进位计数制 数值数据表示三要数 符号的表示 小数点的处理
3
2.1. 进位计数制 数制中的三个基本名词术语: 数码:用不同的数字符号来表示一种数制的 数值,这些数字符号称为“数码”。
数码:用不同的数字符号来表示一种数制的 数值,这些数字符号称为“数码”。 基: 数制所使用的数码个数称为“基”。 权: 某数制各位所具有的值称为“权”。
4
2.1.1 十进制数(Decimal System) 数码:0、1、…… 8、9 基:10(逢十进一,借一当十) 权:以10为底的幂
任何一个十进制数DnDn-1…D1D0D-1…,可以表示成按权展开的多项式: Dn×10n+Dn-1×10n-1+…+D1×101+D0×100+D-1×10-1+…+D-m×10-m 例如:1234.5的按权展开多项为: 1234.5=1×103+2×102+3×101+4×100+5×10-1
5
2.1.2 二进制数(Binary System) 数码:0和1 基:2 权:以2为底的幂
任何一个二进制数BnBn-1…B1B0B-1…B-m,可以表示成按权展开的多项式: Bn×2n+Bn-1×2n-1+…+B1×21+B0×20+B-1×2-1+…+B(-m+1)×2-(m-1)+B-m×2-m 例如: 的按权展开多项为: =1×23+1×22+0×21+1×20+0×2-1+1×2-2
6
2.1.3 八进制数(Octave System) 八进制数的一般式可以表示为: 数码: 0、1、…… 6、7 基: 8 权:以8为底的幂
基: 8 权:以8为底的幂 八进制数的一般式可以表示为: On×8n+On-1×8n-1+…+O1×81+O0×80+O-1×8-1+…+O(-m+1)×8-(m-1) +O-m×8-m
7
2.1.3 十六进制数(Hexadecimal System)
数码: 0、1、…… 8、9、A(1010)、B(1011)、C(1100)、D(1101)、E(1110)、F(1111) 基: 16 权:以16为底的幂 十六进制数的一般式可以表示为: Hn×16n+Hn-1×16n-1+…+H1×161+H0×160+H-1×16-1+…+H(-m+1)×16-(m-1) +H-m×16-m 例如: A89B.CD的按权展开多项为: (A89B.CD)16 =A×163+8×162+9×161+B×160+C×16-1+D×16-2
8
2.2. 各种进位制之间的相互转换 2.2.1.任意进制数转换为十进制数
二进制数、八进制数、十六进制数等各种进制数转换为十进制数可统一表示为下式: 式中: R ─ 某种进位计数制的基数; i ─ 位序号; Ki─ 第i位上的一个数码为0~R-1中的任一个; Ri ─ 则表示第i位上的权; m,n ─ 最低位和最高位的位序号。 用上式可将任何一个二进制数、八进制数、十六进制数直接转换为十进制数,这叫做按权展开法。
9
任意进制转换为十进制例子 ⑴. 二进制数转换为十进制数 (1011.0101)2
=1×23+0×22+1×21+1×20+0×2-1+1×2-2+0×2-3+1×2-4 =8+0+2+1+0+1/4+0+1/16 =( )10 ⑵. 八进制数转换为十进制数 (75.21)8=7×81+5×80+2×8-1+1×8-2 =56+5+2/8+1/64 =( )10 ⑶. 十六进制数转换为十进制数 (175.FB)16=1×162+7×161+5×160+15×16-1+11×16-2 =256+112+5+15/16+11/162 =( )10
10
2.2.2. 十进制整数转换为二进制数 (1). 除基取余法 (连除基数、倒取余)
方法: “除2取余”,即十进制整数被2除,取其余数,商再被2除,取其余,……,直到商为0时结束运算。然后把每次的余数按倒序规律排列就得到等值的二进制。 例:把一个十进制数156转换为二进制数。 结果:(156)10=( )2
11
十进制整数转换为二进制数 (2).减权定位法 方法:从高位起依次减各位的权,若够减,则该位为1,差值继续往下比较,否则该位为0,跳过该位,直所有位比较完成 例:将(75)10转换为二进制数 位权 差 位值 75-64 = 11… 1 11< … 0 11< … 0 11-8 = 3 … 1 3 < … 0 3 -2 = 1 … 1 1- 1 = 0 … 1 (75)10=( )2 位(k) 位权(2k) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 32 64 128 256 512 1024 2048 4096 8192 16384 37268 65536 ...
12
2.2.3. 十进制纯小数转换为二进制数 (1). 乘基取整法 (连乘基数、正取整) 例: 将(0.6875)10 转换为二进制数:
方法:把十进制纯小数乘以2,取其整数,乘积的小数部分再乘以2,取整..….,直到乘积的小数部分为0。然后把每次乘积的整数部分按正序规律排列,即为等值的二进制数。 例: 将(0.6875)10 转换为二进制数: 小数 基 积 取整 0.6875×2= l 0.375 ×2=0.75 0 0.75 ×2=1.5 1 0.5 ×2 =1.0 1 结果为 (0.6875)10 =(0.1011)2
13
2.2.3. 十进制纯小数转换为二进制数 (2).减权定位法
方法:与整数减权定位类似,从高位起依次减各位的权,若够减,则该位为1,差值继续往下比较,否则该位为0,跳过该位,直到精度满足要求为止 例:将(0.6785)10转换为二进制数 位权 差 位值 = … 1 0.1785< … 0 = … 1 0.0535< … 0 (0.6785)10=(0.1010…)2
14
方法:整数部分“除2取余”,小数部分“乘2取整”,然后再进行组合。
十进制带小数转换为二进制数 方法:整数部分“除2取余”,小数部分“乘2取整”,然后再进行组合。 例:将(86.625)10转换为二进制数 整数部分: (86) = (101011)2 小数部分: (0.625)10= (0.101)2 结果: (86.625)10= ( )2
15
二进制数与十六进制数的相互转换 二进制 十六进制 0000 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F (1).二进制数→十六进制数 4位二进制数代表一位十六进制数,在转换过程中:以小数点为界,4位二进制数为一组,不足4位用0补全,然后每组用等值的十六进制数表示。 ( )2 =( )2 =(4A.A)16 在汇编语言中,十六进制数用后缀“H”表示。所以,(322F)16应写成322FH。 (2).十六进制数→二进制数 把十六进制数的每一位用等值的4位二进制数来替换即可,如: (4F.8A)16 =( )2 =( )2
16
2.3 带符号数的表示 机器数 原码、反码、补码和移码 定点数和浮点数
17
2.3.1 机器数 2.3.1.1.机器数和真值的概念 符号的数值化:把正负符号用一位二进制数码来表示。
符号位:符号数值化后占的若干个数值位。 机器数:数的符号用二进制数“0”或“1”来表示的,且符号位总是在该数的最高数值位之前的那种数。规定“0”表示正号,“1”表示负号。原码、补码、反码、移码等把符号位和数值位一起编码表示的数就是机器数。 真值: 用“+”、“-”表示符号的那种数。 例: N1= ,N2= ,这是真值, 表示成机器数就为: [N1]原=0.1011,[N2]原=1.1011。
18
2.3.1.2 机器数的特点 ⑴用二进制数码表示,优点: ①使用元器件简单,便于硬件实现 ②运算简单 ③节省存储设备
④便于用逻辑代数进行逻辑设计 ⑵机器数所表示的数值范围是有限的,无法表示时,便产生溢出 机器数所表示的数值范围是由机器的字长决定,字长越长,所能表示的数的范围越大。
19
(3).字长为n位的机器,它所能表示的机器整数X除0以外,最小是1,最大是2n-1,即其所表示的范围是:1≤X≤2n-1
机器数的特点 (3).字长为n位的机器,它所能表示的机器整数X除0以外,最小是1,最大是2n-1,即其所表示的范围是:1≤X≤2n-1 (4).对于不带符号位的定点纯小数(即小数点位于机器数的最左边的数),字长为n位的机器所能表示的机器数X的范围是:2-n ≤X≤1-2-n
20
2.3.1.3 符号的数值化表示 用0表示正(“+”)号,用1表示负(“-”)号。 以字长为8位为例, +1101101和 -1101101
这两个数的表示如图所示:
21
原码表示方法:符号位为0表示正数,为1表示负数,数值部分用二进制数的绝对值表示的方法。通常用[X]原表示X的原码。
原码、反码、补码和移码 2.3.2.⒈原码 原码表示方法:符号位为0表示正数,为1表示负数,数值部分用二进制数的绝对值表示的方法。通常用[X]原表示X的原码。
22
0,x 2n > x ≥ 0 [x]原 = 2n x 0 ≥ x > 2n 带符号的绝对值表示 2.3.2.⒈1. 整数的原码 x 为真值
如 x = +1110 [x]原 = 0 , 1110 用 逗号 将符号位 和数值位隔开 x = [x]原 = = 1 , 1110 带符号的绝对值表示
23
x 1 > x ≥ 0 [x]原 = 1 – x 0 ≥ x > 1 2.3.2.⒈2. 小数的原码 x 为真值 如
用 小数点 将符号 位和数值位隔开 x = [x]原 = 1 ( ) = 用 小数点 将符号 位和数值位隔开 x = [x]原 = x = [x]原 = 1 ( ) =
24
2.3.2.1.3 原码表示特点 (1)优点:简单、直接 (2)缺点:原码做加法时,会出现以下问题:
要求 数 数2 实际操作 结果符号 加法 正 正 加 正 加法 正 负 减 可正可负 加法 负 正 加法 负 负 加 负 能否只做加法?找到一个与负数等价的正数来代替这个负数,就可以使减法变加法
25
2.3.2.2 补码表示 2.3.2.2.1.补的概念 ①.时钟:以12为一个计数循环。 6-3(逆时针) 6+9 (顺时针)
可见模为12时-3可以用9代替 ②.角度:以360为一个计数循环 20-30 可见模为360时 -30和330是等价的 结论: 1.一个负数加上 “模” 即得该负数的补 2.两个互为补数的数 它们绝对值之和即为 模 数
26
2.3.2.2.2. 补码的定义: 把某数X加上模数K,称为以K为模的X的补码。 [X]补=K+X
因此正数的补码是最高位为符号“0”,数值部分为该数本身;负数的补码是最高位为符号“1”,数值为用模数减去该数的绝对值。
27
整数补码 [x]补 = 0,x 2n > x ≥ 0 2n+1 + x 0 > x ≥ 2n(mod 2n+1) 如 x = +1010
= 用 逗号 将符号位 和数值位隔开 1,
28
小数补码 x 1 > x ≥ 0 [x]补 = 2 + x 0 > x ≥ 1(mod 2) x 为真值 如 x = + 0.1110
= 用 小数点 将符号位 和数值位隔开
29
补码的快速计算方法 ①.正数的补码与其原码相同 ②.负数补码方法1: 负数补码 可用 “除原码除符号位外,每位取反,末位加 1 得到” 例:若X原=1.0101,求X补 尾数变反: 末位加1: X补=
30
③.负数补码方法2 符号位不变,尾数倒序第一个1及之前的0不变,其余各位变反 例: 若X原= ,求X补 X补=
31
练习 求下列真值的补码 [x]原 [x]补 真值(字长8) x = + 70 x = 0.1110 x = 0.0000 x = –70
= 0, 0, = – 1, 1, 0.1110 0.1110 1.1110 1.0010 0.0000 0.0000 1.0000 0.0000 1.0000 不能表示 [x]补 = x > x ≥ 0 2+ x > x ≥ –1(mod 2) 由小数补码定义 [ 1]补 = 2 + x = =
32
反码表示 反码的定义: 正数的反码就是这个数本身,而负数的反码是符号位为1,数值部分等于其绝对值各位求反。
33
2.3.2.3.2 整数反码 x = +1101 x = 1101 [x]反 = 0,1101 [x]反 = (24+1 1) 1101
0,x n > x ≥ 0 ( 2n+1 – 1) + x ≥ x > 2n(mod 2n ) x 为真值 n 为整数的位数 如 x = +1101 x = [x]反 = 0,1101 [x]反 = ( ) = 用 逗号 将符号位 和数值部分隔开 = 1,0010
34
小数反码 [x]反 = x > x ≥ 0 ( 2 – 2-n) + x ≥ x > 1(mod n) x 为真值 如 x = x = [x]反 = [x]反 = (2 2-4) = 用 小数点 将符号位 和数值位隔开 =
35
三种机器数的小结 最高位为符号位,书写上用“,”(整数) 或“.”(小数)将数值部分和符号位隔开 对于正数,原码 = 补码 = 反码 对于负数 ,符号位为 1 ,其 数值部分 原码除符号位外每位取反末位加 补码 原码除符号位外每位取反 反码
36
2.3.2.5 移码表示 错 错 补码表示很难直接判断其真值大小 x + 25 十进制 二进制 补码 如 x = +21 x = –21
+10101 0,10101 大 – 10101 1,01011 +11111 0,11111 错 大 – 11111 1,00001 x + 25 = 大 正确 = = 大 正确 =
37
2.3.2.5.1 移码的定义 [x]移 = 2n + x(2n>x ≥ -2n) x 为真值,n 为 整数的位数 移码在数轴上的表示
真值 如 x = 10100 [x]移 = = 1,10100 用 逗号 将符号位和数值位隔开 x = –10100 [x]移 = 25 – 10100 = 0,01100
38
移码和补码的比较 设 x = [x]移 = = 1, 1 [x]补 = 0, 设 x = – [x]移 = 27 – = 0, [x]补 = 1, 1 补码与移码只差一个符号位
39
2.3.2.5.3. 真值、补码和移码的对照表 [x] 补 [x] 移 真值 x ( n = 5 ) - 1 0 0 0 0 0
十进制整数 ± … … … … 1 2 31 32 33 34 62 63 ±
40
移码的性质 ① 最高一位为符号位,其取值与原码、补码都相反,“1”表示正号,“0”表示负号。移码常用于表示浮点数的阶码,通常只使用整数。 ② 对移码一般只执行加减运算,在对两个浮点数进行乘除运算时,是尾数实现乘除运算,阶码执行加减运算。对阶码执行加减运算时,需要对得到的结果加以修正,修正量为2n-1,即要对符号位的结果取反后,才得到移码形式的结果。 ③ 在移码的表示中,0有惟一的编码,即[0]移=1000…0,而且,机器零的形式为 000…000。即当浮点数的阶码≤-2n-1时,不管尾数值的大小如何,都属于浮点数下溢,被认为其值为0,这时,移码表示的阶码值正好是每一位都为0的形式,与补码的0完全一致。这有利于简化机器中的判零线路。
41
2.3.3 数的定点表示和浮点表示 根据小数点位置的不同,机器数有定点数和浮点数。
① 定点数表示方式:小数点的位置是固定不变的数称为定点数。若约定小数点固定于机器数最低位的右边,则机器数表示整数;若约定小数点固定于机器数数值位的左边符号位的右边,则机器数表示纯小数。 ② 浮点数表示方式:浮点数是一种指数形式的表示方式,其一般表示式为:X=2r·x。其中,r称为X的阶码,它指明了小数点的位置,表示数的大小;x称为X的尾数,表明了X的有效值。
42
定点数表示法 通常把小数点固定在数值部分的最高位之前,或把小数点固定在数值部分的最后面。前者将数表示成纯小数,后者把数表示成整数。如图所示。 对纯小数进行运算时,要用适当的比例因子进行折算,以免产生溢出,或过多损失精度。
43
式中,M为数N的尾数或数码,E为指数,是数N的阶码,是一个二进制整数 浮点数分为阶码和尾数两个部分。
浮点数表示法 浮点数是指在数的表示中,其小数点的位置是浮动的。任一个二进制数N可以表示成: N=2E·M 式中,M为数N的尾数或数码,E为指数,是数N的阶码,是一个二进制整数 浮点数分为阶码和尾数两个部分。
44
Ef E1 …Em Mf M1 …Mn R:阶码底,隐含约定。 E:阶码,为定点整数,补码或移码表示。 其位数决定数值范围;
浮点表示法 E 浮点数真值:N = + R ×M Ef E1 …Em Mf M1 …Mn 浮点数机器格式: 阶符 阶码 数符 尾数 R:阶码底,隐含约定。 E:阶码,为定点整数,补码或移码表示。 其位数决定数值范围; 阶符表示数的大小。 M:尾数,为定点小数,原码或补码表示。 其位数决定数的精度; 数符表示数的正负。 尾数规格化:1/2≤ M <1 最高有效位绝对值为1
45
浮点数的规格化 浮点数通常采用规格化的表示方法。所谓浮点数的规格化就是其尾数小数点后的第一位要为1,若不为1,就要用“左规” 或“右规”的方法使其为1。左规就是尾数向左移动(同时调整阶码),右规为向右移动,直至尾数的第一位为1或阶码为全0或最小值。 如: 210×0.1101,-210×0.1101就是规格化的浮点数; 而 211×0.0110,-211×0.0110是非规格化的浮点数。 思考:为什么需要规格化?
46
例:把非规格化的浮点数 N=211×0.0110规格化 解:把浮点数N的尾数向左移一位(或尾数的小数点右移一位),变成0.1100,同时,阶码递减1,得到N=210×0.1100,就是规格化的浮点数。
47
2.3.3.4. 浮点表示范围 阶符1位,阶码m位,补码表示,以2为底; 数符1位,尾数n位,补码表示,规格化。 2 -1 阶码为最大数:
2 -1 m 阶码为最大数: 最小浮点数: 尾数为绝对值最大的负数: -1 2 -1 m 阶码为最大数: 最大浮点数: 1-2 -n 尾数为最大数: -2 m 阶码为最小数: 最小浮点正数: 尾数为最小正数: 2-1 例.某规格化浮点数用补码表示,其中阶码6位,含1位阶符;尾数10位,含1位数符。 表示范围: -231~ 231 (1-2-9) 表示精度: 2-33
48
练习: 例 将 写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取 10 位,数符取 1 位,浮点数阶码取 5 位(含1位阶符)。 19 128 解: 设 x = + 19 128 二进制形式 x = 定点表示 x = 000 浮点规格化形式 x = ×2- 10 定点机中 [x]原 = [x]补 = [x]反 = 浮点机中 [x]原 = 1, 0010; [x]补 = 1, 1110; [x]反 = 1, 1101;
49
解: 将 –58 表示成二进制定点数和浮点数, 并写出它在定点机和浮点机中的三种机器数及阶码 为移码,尾数为补码的形式(其他要求同上例)。
例 2 解: 设 x = –58 二进制形式 x = – 定点表示 x = – 0000 浮点规格化形式 x = – ( ) × 2110 定点机中 浮点机中 [x]原 = 1, [x]原 = 0, 0110; [x]补 = 1, [x]补 = 0, 0110; [x]反 = 1, [x]反 = 0, 0110;
50
2.3.3.5. 机器零 当浮点数 阶码等于或小于它所表示的最小数 时,不论尾数为何值,按机器零处理
当浮点数 尾数为 0 时,不论其阶码为何值,按机器零处理 当浮点数 阶码等于或小于它所表示的最小数 时,不论尾数为何值,按机器零处理 如 m = n = 10 当阶码和尾数都用补码表示时,机器零为 ×, × × × ×; …… 0 (阶码 = -16) 1, ; ×.×× ……× 当阶码用移码,尾数用补码表示时,机器零为 0, ; …… 0 有利于机器中“ 判 0 ” 电路的实现
51
2.3.3.6. 定点表示与浮点表示方法总结 2.3.3.6.1 定点表示步骤 2.3.3.6.2 浮点表示步骤
求浮点表示真值的步骤
52
2.3.3.6.1 定点表示步骤 ①.转换为2进制真值 ②.根据字长补0(预留符号位,整数前补零,小数后补零) ③.转换为原码表示
④.原码转换为补码、反码 ⑤.由补码转换为移码 求(-2A)16的补码和移码表达(字长8) (真值) (补0) 1, (原码) 1, (补码) 0, (移码)
53
2.3.3.6.2 浮点表示步骤 ①.转换为2进制真值 ②.规格化(>20右规,<2-1左规) ③.阶码转化为二进制真值
例:求( )10的浮点数表达(阶码8位含阶符,尾数24位含数符,阶码移码、尾数补码表达) ①.转换为2进制真值 ②.规格化(>20右规,<2-1左规) ③.阶码转化为二进制真值 ④.尾数和阶码分别补0 ⑤.阶码按阶码位数要求转化为补码或移码 ⑥.尾数按其位数要求转化为原码或补码 ⑦.阶码和尾数组合成浮点表达,阶码和尾数之间用‘;’隔开 真值: ( )2 规格化: ( )2×26 阶码: (6)10=(110)2 补 = 原码 , 补码 , 移码 , 尾数: 补 原码 补码 结果: (1, ; )2 =(86B2C000)16
54
2.3.3.6. 求浮点表示的真值步骤 ①.如果是16进制,转换为2进制,并分离阶码和尾数 ②. 求阶码的二进制真值
例: 求(2389A0)16,其中阶码8位(含阶符,移码码表示),尾数16位(含数符,补码表示)的真值 ①.如果是16进制,转换为2进制,并分离阶码和尾数 ②. 求阶码的二进制真值 ③. 阶码二进值真值转化为10进制 ④.求尾数二进制真值 ⑤.尾数二进制真值转化为10进制 ⑥.由阶码真值和尾数真值合成浮点数的真值 (2389A0)16 =(0, ; )2 阶码: 0, (移) => 1, (补) => 1, (原) => (真) = (-93)10 尾数: (补) => (原) => (真) = ( )10 结果: × 2-93
55
定点数与浮点数的比较 1.机器字长相同时,浮点数表示的范围大; 2.浮点数为规格化数时,其精度比定点数高; 3.浮点数运算电路复杂; 4.判断溢出:浮点数根据阶码 定点数根据数值本身
56
IEEE 754 标准 IEEE754标准的来历: 在六、七十年代,各家电脑公司的各个型号的电脑,有着千差万别的浮点数表示,却没有一个通用的标准。这给资料交换、电脑协同工作造成了极大不便。IEEE的浮点数专业小组于七十年代末期开始酝酿制定浮点数标准。在1980年,Intel公司就推出了8087浮点协处理器,其浮点表示法及定义的运算具有足够的合理性、先进行性,被IEEE采用作为浮点数标准,于1985年发行。
57
2.3.3.8.2 IEEE 754 标准格式 特点: 1.特殊的规格化方式 2.以2为底 3.特殊的移码偏移量 4.尾数为原码表示
S 阶码(含阶符) 尾 数 数符 小数点位置 特点: 1.特殊的规格化方式 2.以2为底 3.特殊的移码偏移量 4.尾数为原码表示
58
IEEE754标准规定的浮点数种类 符号位 S 阶码 尾数 总位数 短实数 长实数 临时实数 注:在C语言中,短实数就是float型数据,又称单精度浮点数;长实数就是double型数据,又称双精度浮点数;临时实数很少使用。
59
IEEE 754标准浮点数的规格化 IEEE 754标准规定,如果指数部分有m+1位(含1位阶符),尾数部分有n+1位(含1位数符号) 则浮点数表达为 : X = ±2E×M 指数取值范围为: -2m+1 ≤ E≤2m 1≤M<2 (-2m+2≤E≤2m ) 尾数取值范围为: 0<M< (E=-2m+1) 从上式可以看出,IEEE754标准有两种规格化方式,第一种规格化方式称为正规浮点数,规格化后尾数最高位在小数点前,且不出现在浮点数代码中 第二种规格化方式称为非正规浮点数,规格化后尾数最高位出现在小数点后,因此要在浮点数代码中表达,指数部分代码表达值为真值-1 注意:非正规浮点数只表达绝对值比最小正规浮点数小的浮点数。
60
[E]移 = E+ 2m -1(2m ≥ E ≥ -2m+2) [E]移 = E+ 2m -1( E= -2m+1)=0
IEEE 754标准浮点数指数移码表示 (1). 正规浮点数 [E]移 = E+ 2m -1(2m ≥ E ≥ -2m+2) 其中E为真值,以短实数为例,E取值最小为-126,最大为128,移码编码值最小为1,最大为255 (2).非正规浮点数, [E]移 = E+ 2m -1( E= -2m+1)=0 其中 E = E真-1 从上式可以得到非正规浮点数移码为0,以短实数为例,非正规浮点数指数真值为 =-126
61
2.3.3.8.6 IEEE 754 标准浮点与原理性浮点区别 (1).格式不一样
原理性浮点最高位为阶符,数符在阶码后,以32位浮点数为例,格式分别为: 位序号: … … 原理性浮点数: Ef E6 … E0 S0 M … M0 阶符 阶码 数符 尾数 754标准浮点数: S0 Ef E6 … E0 M … M0 数符 阶符 阶码 尾数
62
2.3.3.8.6 IEEE 754 标准浮点与原理性浮点区别 (2).规格化方式不一样
①. 原理性浮点数采用标准规格化方式,除以0外,尾数小数点后的第一位要为1,规格化后 2-1≤ 尾数 <20 ②. IEEE 754 标准规格化后,尾数在0至2之间 0 < 尾数 <2 对于正规浮点数,要求尾数不小于1,因此规格化后 1 ≤ 尾数 <2 且最高位不出现在浮点数代码之中,左规时比原理性浮点数多1次,右规时比原理性浮点数少1次。 对非正规浮点数,表示的是在指数下溢情况下尾数仍然小于1的数,因此尾数不需要规格化 (原因:避免突然式下限溢出,即0与绝对值最小的浮点数之间的距离大于相邻的小浮点数之间的距离)
63
2.3.3.8.6 IEEE 754 标准浮点与原理性浮点区别 (3).阶码的移码不一样: ①.原理性浮点数移码为
[x]移 = 2n + x(2n>x ≥ -2n),其中,n为整数的位数,如8位移码(含1位阶符)偏移量为128,真值取值范围为从-128到127 ② IEEE 745标准移码为 [x]移 = 2n + x -1(2n ≥ x > -2n+1) 对8位移码(含1位阶符),其真值范围 -126 到128 从上面可以看出,相同的真值下,IEEE 754标准移码值比原理性浮点数移码值小1
64
突然式下限溢出(补充) ①. 原理性浮点数规格化:
以32位浮点数为例,如果采用标准规格化,则最小正实数阶码真值为 -27=-128,除机器0外,尾数最小为2-1, 最小非0正实数为: 2-1×2-128=2-129 次小非0正实数为: ( ) ×2-128 因此最小正实数与0的距离为 = 2-129 次小正实数与最小正实数的距离为 ( ) × ×2-128=2-23×2-128=2-22×2-129 可见,最小正实数与0的距离是次小正数与最小正数距离的222倍,可见非常突然地下限溢出到0,这种情況的一种后果是:两个不等的小浮点数相减,结果将是0,这就是突然式下限溢出
65
32位浮点数最小正实数指数部分是-126,尾数最小为2-23 因此最小非0正实数为 (2-23) × 2-126
渐进式下限溢出(补充) ②.IEEE 754规格化: 32位浮点数最小正实数指数部分是-126,尾数最小为2-23 因此最小非0正实数为 (2-23) × 2-126 次小非0正实数为 ( ) × 2-126 因此,最小非0正实数和0的距离以及次小非0正实数和最小非0正实数的距离都是 2-23×2-126,这就是Intel公司发明的渐进式下限溢出
66
IEEE745标准短实数的各种特殊值 类别 数符 指数真值 指数移码 尾数域 数值 零 -127 0000 0000
-127 0.0 负零 1 −0.0 1.0 -1 −1.0 最小非正规数 * -126 ±2−23 × 2−126 = ±2−149 ≈ ±1.4×10-45 中间非正规数 ±2−1 × 2−126 = ±2−127 ≈ ±5.88×10-39 最大非正规数 ±(1−2−23) × 2−126 ≈ ±1.18×10-38 最小的正规数 ±2−126 ≈ ±1.18×10-38 最大的正规数 127 ±(2−2−23) × 2127 ≈ ±3.4×1038 正无穷 128 +∞ 负无穷 −∞ NaN non zero
67
例:求(-38.625)10的IEEE 754标准短实数表达 真值: (-100110.101)2
真值: ( )2 正规规格化: ( )2×25 阶码: (5)10=(101)2 补 = 原码 , 补码 , 移码 , 754移码 , = 1, 尾数: 补 原码 结果: ( 1. 1, ; )2 =(C21A8000)16
68
2.4 非数值数据的表示 BCD编码 字符数据的编码 汉字编码
69
BCD编码 在计算机中,为了适应人们的习惯,采用十进制数方式对数值进行输入和输出。这样,在计算机中就要将十进制数变换为二进制数,即用0和1的不同组合来表示十进制数。将十进制数变换为二进制数的方法很多,但是不管采用哪种方法的编码,统称为二—十进制编码,即BCD码(Binary Coded Decimal)。
70
编码 8421码是二进制编码各位的权分别是8、4、2、1,因此叫8421码。下表是十进制数码与8421码的对照表。 要注意,每1位十进制数码对应4位8421码 例:写出十进制数175的8421码 (175)10= ( )8421
71
字符数据的编码 非数值数据又叫符号数据或字符数据,包括字母和符号。目前世界上用ASCII码(American Standard Code for Information Interchange)来表示。ASCII码有7位ASCII码和8位ASCII码两种,7位ASCII码称为标准ASCII码,8位ASCII码称为扩充ASCII码。 ASCII码中,编码为20H以前的字符都是不可见字符,一般做控制用,如0DH为换行符。20H为空格字符
72
ASCII码字符编码表
73
2.4.3. 汉字编码 汉字编码:机内码和机外码 机内码:是在计算机内部使用的用二进制代码 表示的汉字编码,用于在计算机内部存储、交
换、处理加工汉字信息 机外码:是不在计算机内使用的汉字编码,主 要是指汉字输入码。此外还有供输出的汉字字 型点阵码。
74
国标码 国标码:指我国1981年公布的“中华人民共和国国家标准信息交换汉字编码”,是一种国家标准编码,代号为“GB ”。它以94个可显示的ASCII码字符为基集,由两个字节构成。国标码与ASCII码属同一制式,可以认为国标码是扩展的ASCII码。
75
国家标准(GB )汉字字符集示意图 国标码用两个字节的16进制数表示,例如“文”的国标码是“4E44H”,“中华人民共和国”的国标码分别是“5650H、3B2AH、484BH、4371H、3932H、3A4DH、397AH”。
76
汉字机内码 (实质:汉字的地址) 汉字机内码:在计算机系统内部用来表示汉字的编码。 ASCII码是一种西文机内码 在设计汉字机内码时,应遵循如下原则: ⑴ 汉字机内码的编码不能有二义性,否则和其他编码分不清,例如要能和ASCII码严格区分。 ⑵ 代码的长度尽可能短,所能表示的汉字要尽可能多。 ⑶ 应与国标码有相应的对应关系,以便于对汉字库的处理和对汉字的查找。
77
汉字机内码与国标码的关系 汉字机内码高位字节=国标码高位字节+80H 汉字机内码低位字节=国标码低位字节+80H
例如:“文”的国标码是“4E44H”,要求它的机内码,只要把“文”字国标码两个字节的16进制数4EH和44H分别加80H,即成该汉字的机内码。 4EH+80H=CEH 44H+80H=C4H
78
汉字输入码:指直接从键盘输入的各种汉字输入方法的编码,属于外码。
汉字输入码 (机外码) 汉字输入码:指直接从键盘输入的各种汉字输入方法的编码,属于外码。 按照编码原理,汉字输入码主要分为三类:数字码(区位码和电报码)、拼音码和字形码(如五笔字型)。还有以汉字的音和形相结合的音形码和形音码。
79
数字码:将待编码的汉字集以一定的规则排序以后,依次逐个赋予相应的数字串作为汉字输入代码。
汉字数字码 数字码:将待编码的汉字集以一定的规则排序以后,依次逐个赋予相应的数字串作为汉字输入代码。 典型的数字码:区位码和电报码 优点:无重码 缺点:代码难以记忆。
80
区位码与国标码、机内码的对应关系 用十进制数输入的区码和位码先分别转换为十六进制数(各一个字节),再分别加上20H,就成了国标码;再在两个字节分别加上80H,就成为机内码。 机内码高字节= 国标码高字节+80H = 区码+A0H 机内码高字节= 国标码低字节+80H = 位码+A0H 例,“文”字的区位码为4636,求其国标码机内码 解: (4636) 10 = 2E24H 国标码高字节 = 2EH +20H = 4EH 国标码低字节 = 24H+20H = 44H 机内码高字节 = 2EH+A0H = CEH 机内码低字节 = 24H+A0H =C4H 因此国标码就是“4E44H”,内码为“CEC4H”。
81
2.4.3.3.2. 拼音码 拼音码就是以汉语拼音方案为基础的输入方法
最大优点:简单易学,只要会汉语拼音,就能输入汉字,并且输入时不影响思考,适合于业务人员和专业技术人员使用。 发展过程: 全拼输入法->双拼输入法->增加联想功能->以词为单位的智能拼音输入法->增加记忆功能的智能拼音输入法。
82
字形码 字形码就是以汉字的形状确定的编码 优点:能广泛地为国内外不同地区使用汉字方言较重的人们服务,重码较少,适合专业打字人员输入。 缺点:编码规则较复杂。 典型:五笔字型输入法
83
汉字字型码——汉字点阵字模库 汉字信息存储在计算机内有两种编码: 一种是汉字机内码,另一种是字型点阵码。 点阵字型方式:是把汉字像图形一样置于网状方格上,每格是存储器中的1个位(bit),如16×16点阵是在纵向16点、横向16点的网状方格上描绘一个汉字,有笔划的格对应1,无笔划的格对应0。
84
图中表示了“华”字的16×16点阵字型。 这种用点阵形式存储的汉字字型信息的集合称为汉字的点阵字模库,简称汉字库。
85
汉字点阵字模的分类
86
汉字点阵字库一般按照区位码定位字模,一个汉字字模的大小为 点阵数/8,如24×24点阵的汉字字模大小为72字节
汉字点阵字库的存储格式 汉字点阵字库一般按照区位码定位字模,一个汉字字模的大小为 点阵数/8,如24×24点阵的汉字字模大小为72字节 字模在字库中的偏移量为 ((区码-1)×94+(位码-1)×94)×点阵数/8 =(机内码高位-161)×94+(机内码低位-161)×94×点阵数/8
87
2.4.3.5 汉字字符集 目前,在我国使用的计算机汉字操作平台中有三种汉字字符集。
⑴ 国标码字符集GB :我国政府于1981年公布的《信息交换用汉字编码字符集 基本集》,在该字符集中收录了6763个常用汉字和各种符号682个,合计7445个。 ⑵ GBK汉字集:即汉字内码扩充规范,”大字符集”。在此汉字集中一共收录了20900个汉字,它包容了GB 的6763个常用汉字,台湾BIG5码的13000多个汉字。此扩充规范发布后,美国的Microsoft公司率先将GBK规范装入Windows95中。在Windows95简体中文版中,又增加了101个补充字,一共有21001个字。 ⑶ 国标码GB18030字符集:即GB 《信息技术 信息交换用汉字编码字符集 基本集的扩充》新标准。该字符集共收录了27000多个汉字,总编码空间超过150万个码位,是真正的大汉字集。它在体系结构上延续了GB 《信息处理 七位和八位编码字符集 代码扩充技术》编码体系,采用单/双/四字节混合编码,该标准还收录了藏文、蒙文、维吾尔等主要的少数民族文字,以及世界上几乎所有的语言文字,为中文信息在Internet上的传输与交换提供了保障。
88
随堂测验 1.将下列数值转换为二进制数,并分别求其原码、补码和反码表达(字长8位)
(179) (0.5625) (-86)10 ( )10 (-38)16 2.求下列数值的移码表达(字长8位) (-33) 10 (126)10 3.求下列数据的正规浮点表达,其中阶码6位(含阶符),移码表达;尾数10位(含数符),补码表达 ( ) ( )10 4 .求浮点表达(824A80)16的真值,其中阶码8位(含阶符,移码表示),尾数16位(含数符,补码表示) 5. 求( )10的IEEE754标准短实数表达(结果写成16进制)
89
第五节 指令信息的表示 本节主要讨论:一般指令格式 常用寻址方式 面向用户指令类型
90
2.5.1 机 器 指 令 2.5.1.1 概述 (机器)指令:机器能够识别并执行的命令 指令字:代表指令的一组二进制代码信息
指令字长:指令字中二进制代码的位数 指令系统:一台计算机中所有机器指令的集合 指令系统是表征一台计算机性能的重要因素,其格式和功能不仅直接影响到机器的硬件结构,也直接影响到系统软件,影响到机器的应用范围。
91
指令系统的基本要求 一个完善的指令系统应满足以下四方面的要求: 完备性: 指令齐全、编程方便 高效性: 占内存少,运行速度快 规整性: 指令与运算规则统一 兼容性: “向上兼容”,低档机中的软件可在高档机上运行
92
操作码OP 地址码A 2.5.1.3 指令格式 (1).指令中包含的基本信息 ①.操作码:指定计算机具体执行何种操作
②.操作数或操作数地址:计算机操作的对象(数据) ③.结果存储地址:告诉计算机完成运算后的结果存放于何处 ④.后继指令地址:现行指令完成后,应到何处读取下一条指令 (2).基本指令格式: 操作码OP 地址码A
93
指令中的地址结构是指在指令中明确给出几个地址,给出哪些地址等内容
指令中的地址结构 指令中的地址结构是指在指令中明确给出几个地址,给出哪些地址等内容 存储单元地址码 寄存器编号 地址结构 指令提供地址的方式 显地址方式 隐地址方式 直接或间接给出 :指令中明显指明地址。 :地址隐含约定,不出现在指令中。 使用隐地址可以减少指令中的地址数,简化地址结构。
94
(1) 四地址 (2) 三地址 若 A3 用 A1 或 A2 代替 OP A1 A2 A3 A4 设指令字长为 32 位
OP A1 A2 A3 A4 设指令字长为 32 位 操作码固定为 8 位 A1 第一操作数地址 A2 第二操作数地址 4 次访存 A3 结果的地址 寻址范围 26 = 64 A4 下一条指令地址 (A1) OP (A2) A3 若 PC 代替 A4 (2) 三地址 OP A1 A2 A3 4 次访存 寻址范围 28 = 256 (A1) OP (A2) A3 若 A3 用 A1 或 A2 代替
95
(3) 二地址 (4) 一地址 (5) 零地址 OP A1 A2 (A1) OP (A2) A1 4 次访存 或
OP A1 A2 (A1) OP (A2) A1 4 次访存 或 (A1) OP (A2) A2 寻址范围 212 = 4 K 若结果存于 ACC 3次访存 若ACC 代替 A1(或A2) (4) 一地址 OP A1 2 次访存 (ACC) OP (A1) ACC 寻址范围 224 = 16 M (5) 零地址 无地址码
96
操作码位数确定并且位置固定,最常见的的格式:一条指令由几个字节组成,其中第一个字节(8位)为操作码
操作码结构 (1).固定字长操作码 操作码位数确定并且位置固定,最常见的的格式:一条指令由几个字节组成,其中第一个字节(8位)为操作码 优点: 硬件设计简单,译码时间短 缺点:指令数目受到限制
97
2.5.1.5.2 可变长度操作码(扩展操作码) 操作码的长度随地址数的减少而增加; 不同地址数的指令有不同长度的操作码;
有效缩短指令字长, 一种很重要的指令优化技术。 扩展操作码的设计原则: (1)使用频度较高的指令占用较短的操作码 (2)使用频度较低的指令占用较长的操作码 (3) 需要设置扩展标志。 有利于CPU缩短对指令的译码时间,提高指令执行速度。
98
例2.5.1:某指令系统字长为16位,每个地址的长度为4位,试采用“扩展操作码技术”设计61条指令,其中三地址指令15条,二地址指令15条,一地址指令15条,零地址指令16条。
OP A1 A2 A3 0000 0001 1110 … A1 A2 A3 4 位操作码 15条三地址指令 A2 … A3 1111 0000 0001 1110 8 位操作码 15条二地址指令 1111 … A3 0000 0001 1110 12 位操作码 15条一地址指令 1111 … 0000 0001 16 位操作码 16条零地址指令
99
例2.5.2 设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式。
(1)设操作码固定,若零地址指令有P种,一地址指令有Q种,则二地址指令最多有几种? (2)采用扩展操作码技术,若二地址指令有X种,零地址指令有Y种,则一地址指令最多有多少种? 解(1)因为操作码固定,所以应先确定操作码的位数。操作数的地址码为6位,所以操作码的位数为:16-6-6=4。则4位操作码最多可以有24=16种操作,所以二地址指令最多为:16-P-Q种。 (2)若采用扩展操作码,根据要求可知二地址、一地址和零地址的操作码长度分别为4、10和16位。且二地址指令操作码每减少一种,就最多可构成26种一地址指令操作码;一地址指令操作码每减少一种,就最多可构成26种零地址指令操作码。 由题知二地址指令有X种,则一地址指令最多有(24-X)×26种。设一地址指令有M种,则零地址指令最多有[(24-X)×26-M] ×26种。 由题意知零地址指令有Y种,所以Y= [(24-X)×26-M] ×26 则一地址指令 M=(24-X)×26-Y×26
100
指令字长 指令字长越长,指令种类越丰富,但读取指令的时间也越长,因此在指令设计上出现了两种趋势,即复杂指令系统计算机(CISC)和精简指令系统计算机(RISC)两种类型
101
2.1.6.1 CISC —复杂指令系统 1.CISC的思想 1)与原有机型兼容 2)缩小与高级语言的差异,便于编译器的设计
1)复杂指令利用率不高 2)降低了整机的运算速度 3)机器组成复杂 4)设计周期长,易出错 常见CISC计算机: 微型计算机
102
RISC —精简指令系统 1.RISC的思想: 典型程序中 80% 的语句仅仅使用处理机中 20% 的指令,执行频度高的简单指令,因复杂指令的存在,执行速度无法提高能否用 20% 的简单指令组合不常用的80% 的指令功能 2.RISC 的主要特征: (1).选用使用频率较高的一些 简单指令 复杂指令的功能由简单指令来组合 (2).指令 长度固定 (3).只有 LOAD / STORE 指令访问内存 (4).流水线技术 和超标量技术 (5).组合逻辑 实现控制器 (6).多个 通用 寄存器 (7).采用 优化 的 编译 程序 3.常见RISC计算机: ARM,DSP等
103
RISC和CISC 的比较 (1). RISC更能 充分利用 VLSI 芯片的面积 (2). RISC 更能 提高计算机运算速度 (3). RISC指令数、指令格式、寻址方式少,通用 寄存器多,采用 组合逻辑 ,便于实现 指令流水 (4). RISC 便于设计,可 降低成本,提高 可靠性 (5). RISC 有利于编译程序代码优化 (6). RISC 不易 实现 指令系统兼容
104
寻址种类 立即寻址 直接寻址 间接寻址 变址寻址 2.5.2 常见寻址方式 寻址:CPU以何种方式得到操作数 通常操作数存放位置如下:
(1).包含在指令中 (2).在CPU的寄存器中 (3).在主存储器中(内存) (4).在堆栈区中 (5).在某个I/O端口的寄存器中 寻址种类 立即寻址 直接寻址 间接寻址 变址寻址
105
指令直接给出操作数。 用来提供常数、设置初值等。 例: MOV AX,32H 2.5.2.1. 立即寻址 数在指令中,其长度固定、有限。
定长格式: 操作码θ 立即数S 变长格式: 基本指令 立即数S 数在基本指令之后,其长度可变。 用来提供常数、设置初值等。 例: MOV AX,32H
106
直接寻址 指令直接给出操作数地址。 存储单元号 寄存器号 (数在M中) (数在R中)
107
S =(D) 2.5.2.2.1 存储器直接寻址 定长格式 操作码θ 有效地址D D的位数有限, 限制访存范围 变长格式 基本指令 DL
DH D的位数可覆盖 整个存储空间 S =(D) 例: MOV AX,[8A32H] [83A2H] H AX XXXX => H
108
S =(R) 2.5.2.2.2. 寄存器直接寻址(寄存器寻址) 格式 操作码θ 寄存器号R 用于访问固定的存储单元或寄存器。
例: MOV AX,BX BX H AX XXXX => 1000H
109
间接寻址 指令给出操作数的间接地址。按照该地址访问主存中的某间址单元,从中读出操作数地址,按照操作数地址再次访问主存,得到操作数 存储单元号 寄存器号 (数在M中)
110
S =((D)) 2.5.2.3.1 内存间接寻址 格式 操作码θ 间接地址D 例: MOV AX,short ptr [8A32H]
[8A32H] H [1000H] H AX XXXX => 2000H
111
S =((R)) 2.5.2.3.2 寄存器间接寻址 格式 操作码θ 寄存器号R 例: MOV AX,[EBX] EBX 1000H
特点:R所占位数少;R可提供全字长地址码;修改R内容比修改M内容快。 指针不变(由指令指定),指针内容可变,使同一指令可指向不同存储单元,以实现程序的循环、共享,并提供转移地址。 例: MOV AX,[EBX] EBX H [1000H] H AX XXXX => 2000H
112
堆栈寻址 堆栈是一种按“先进后出”存储顺序进行存取存储结构,堆栈有两端,起点一端固定,称为栈底,另一端称为栈顶,数据压入堆栈,栈顶向上浮动,数据弹出堆栈,栈顶向下浮动,为了指示栈顶的位置,在CPU中设置一个具有自动加、减的寄存器SP,其中的内容就是栈顶单元的地址,数据压栈时SP减小,出栈SP增加
113
(1) 堆栈的特点 硬堆栈 软堆栈 多个寄存器 堆栈 指定的存储空间 先进后出(一个入出口) 栈顶地址 由 SP 指出
进栈 (SP)– SP 出栈 (SP) SP – 1 +1 栈顶 栈底 2000 H SP … 1FFF H … 1FFF H SP 1FFFH 栈顶 栈底 2000 H 进栈 出栈 1FFFH 栈顶 2000 H 栈顶
114
(2) 堆栈寻址举例 PUSH A 前 PUSH A 后 POP A 前 POP A 后 15 200H ACC SP X 栈顶 栈底 主存
1FFH ACC SP 栈顶 200H 栈底 主存 X PUSH A 前 PUSH A 后 Y 1FFH ACC SP X 栈顶 200H 栈底 主存 15 15 200H ACC SP 栈顶 栈底 主存 X POP A 前 POP A 后
115
(3) SP 的修改与主存编址方法有关 ① 按 字 编址 进栈 (SP)– 1 SP 出栈 (SP)+ 1 SP ② 按 字节 编址
存储字长 16 位 进栈 (SP)– SP 出栈 (SP) SP 存储字长 32 位 进栈 (SP)– SP 出栈 (SP) SP
116
PC内容出栈 跳转到子程序入口 PC内容入栈 (返回主程序) (4) 堆栈的应用 1.子程序调用
2. 进入中断程序时保护环境(存储中断程序中使用的寄存器以及标志寄存器等) 跳转到子程序入口 PC内容出栈 (返回主程序) PC内容入栈
117
S =((RX)+ D) 2.5.2.5 变址寻址 格式 操作码θ RX D
指令给出一个寄存器号和一个形式地址(变址量),寄存器内容与变址量之和为有效地址。 格式 操作码θ RX D 变址寄存器号 形式地址 S =((RX)+ D) 修改量 基准地址 例: MOV EAX,4000H [ESI] ESI H [5000H] A00H EAX XXXX => 8A00H
118
S =((Rb)+ D) 2.5.2.6 基址寻址 指令给出一个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。 格式
基址寄存器号 位移量 S =((Rb)+ D) (D的位数只需覆盖一个较小的存储区间) 基准地址 相对于基址的位移 例: MOV EAX,[EBX+100H] EBX H [1100H] A00H EAX XXXX => 8A00H
119
变址与基址的区别: 变址:指令提供基准量(不变), R提供修改量(可变);适 于处理一维数组。 基址:指令提供位移量(不变),
于扩大有限字长指令的访 存空间。
120
指令给出两个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。
基址加变址寻址 指令给出两个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。 格式 操作码θ RX Rb D 变址寄存器号 基址寄存器号 位移量 便于处理两维数组。 S =((RX)+(Rb)+ D) 例: MOV EAX,3000H[EBX][ESI] EBX H ESI H [6000H] 8A00H EAX XXXX => 8A00H
121
指令给出位移量,PC内容与位移量之和为有效地址。
相对寻址 指令给出位移量,PC内容与位移量之和为有效地址。 有效地址相对PC上下浮动,给编程带来方便。 格式 操作码θ PC ±D 隐含指定 位移量,补码表示 S =((PC)±D) 相对寻址广泛应用于转移指令中
122
S =((PC)H,D) 2.5.2.9 页面寻址 格式 操作码θ PC D 例. M为64KB,划分为256页,每页256B。
或隐含指定 位移量 S =((PC)H,D) 页号 页内地址 PC 0165H 7C ... 例. M为64KB,划分为256页,每页256B。 S 017CH 用于页式管理存储系统。 寻址速度快,适于组织程序模块, 有效利用存储空间。
123
2.5.2.10. 对寻址方式的说明 操作码θ 寻址方式 R 寻址方式 R (1)操作码隐含说明不同寻址方式
例.某机指令操作码最高两位 00:RR型指令,寄存器-寄存器寻址 01:RX型指令,寄存器-变址寻址 10:SI型指令,基址-立即寻址 11:SS型指令,基址-基址寻址 (2)指令中设置专门字段说明寻址方式 例.某机指令的每个地址字段中各设置一个3位的寻址方式字段。 3位 3位 操作码θ 寻址方式 R 寻址方式 R 源地址字段 目的地址字段
124
2.5.3 指令类型 (1).按格式可分为: 双操作数指令、单操作数指令、程序转移指令等,如PDP-11 (2).按寻址方式可分为: RR(寄存器-寄存器) 、RX(寄存器-变址存储器)、RS(寄存器-存储器)、SS(存储器-立即数)和SS(存储器-存储器)型等 (3).按指令功能可分为: 传送指令、I/O指令、算数逻辑运算指令、程序控制指令等类型
125
源地址 目的地址 使用传送指令需要注意的问题: (1)传送范围 例. DJS-100系列: 80X86: IBM370:
传送指令 数 源地址 目的地址 使用传送指令需要注意的问题: (1)传送范围 例. DJS-100系列: R M 80X86: R M, R R IBM370: R M, R R, M M
126
(2)指明传送单位 例. 用操作码说明(VAX-11): MOVB 8 MOVW 16 用地址量说明(80X86): MOV AL,BL 8 MOV AX,BX 16 MOV EAX,EBX 32
127
2.5.3.1.2. 80X86的寄存器 EAX (386) ①数据寄存器: EAX,EBX,ECX,EDX AX
AX AH AL ①数据寄存器: EAX,EBX,ECX,EDX ②指针寄存器: ESP(堆栈寄存器),EBP(基数指针寄存器 ) ③变址寄存器:ESI(源变址寄存器 ),EDI(目的变址寄存器) ④段寄存器:CS(代码段寄存器),DS(数据段寄存器),ES(附加段寄存器),SS(堆栈段寄存器) FS(附加段寄存器) GS(附加段寄存器) ⑤.标志寄存器:包含进位标志位、零标志位等32个标志位 ⑥.指令指针寄存器:EIP EBX (386) BX BH BL ECX (386) CX CH CL EDX (386) DX DH DL
128
2.5.3.1.3. 80X86的传送指令 (1). MOV dest,source ( 数据传送)
(2).XCHG op1,op (数据交换) (3) STC,CLC,CMC (进位标志操作) (4)STD,CLD (方向标志操作,该标志主要用于串操作) (5)PUSH,PUSHF,PUSHA (入栈操作) (6)POP,POPF,POPA (出栈操作)
129
I/O指令 各种信息 主机 外设 输出: 主机用输出指令或传送指令将具体设备的控制命令按约定的代码格式送往接口中的控制寄存器,向外设发出命令。 输入: 外设的状态信息也以某种格式放在接口的状态寄存器中,主机用输入指令或传送指令从状态寄存器中取出有关信息进行查询、分析。 因此如何设置控制/状态寄存器是接口设计的关键。
130
2.5.3.2.1 主机对外设的寻址方式 (1). 单独编址: (2). 统一编址:
主机对外设的寻址方式 (1). 单独编址: 编址到寄存器,为每个寄存器(I/O端口)分配独立的端口地址; I/O指令中给出端口地址。 I/O地址空间不占主存空间,可与主存空间重叠。此时访问内存和访问I/O设备的读写信号线应区分开,并且和访问内存的指令也应区分开,采用显示的IO指令,如80X86 (2). 统一编址: 为每个寄存器(I/O端口)分配总 线地址访问外设时,指令中给出总线地址。 此时I/O端口占据部分主存空间。 常将存储空间的低端分配给主存单元,高端分配给I/O端口,以示区分,并可以直接采用内存传输指令访问I/O端口的寄存器,如8051单片机
131
例. 80X86 I/O指令 (n) AL 输入:IN AL,n; ((DX)) AL IN AL,DX; (AL) n
(直接端口寻址) 输入:IN AL,n; 端口地址 ((DX)) AL (间接端口寻址) IN AL,DX; 间接端口地址 (AL) n (直接端口寻址) 输出:OUT n,AL; (AL) (DX) (间接端口寻址) OUT DX,AL;
132
CPU执行简单I/O指令 (启动、停止、查询、清除) 两级I/O指令 I/O处理机执行I/O操作指令 (输入、输出……)
133
基本算术运算指令: 扩展算术运算指令: 2.5.3.3 算术运算指令 定点加、减、求补、比较大小等 定点乘、除 浮点加、减、乘、除
向量运算(大型机,高档微机(P3及以上)的SSE指令)
134
2.5.3.3.2. 80X86常用算术运算指令 加法运算: ADD dest,source (无进位加)
ADC dest,source (有进位加) 减法运算: SUB dest,source (无借位减) SBB dest,source (有借位减) 乘法运算: MUL op (无符号乘) IMUL op (有符号乘) 除法运算: DIV op (无符号除) IDIV op (有符号除)
135
逻辑运算包括三种基本逻辑运算“与”、“或”、“非”以及常用的“异或”运算等,有的机器还包括逻辑移位运算。
逻辑运算指令 逻辑运算包括三种基本逻辑运算“与”、“或”、“非”以及常用的“异或”运算等,有的机器还包括逻辑移位运算。 计算机中逻辑运算指令一般都是按“位”进行,如 8H AND AH = 8H
136
(5). 异或运算: XOR dest,source (6). 逻辑左移: SHL op (7). 逻辑右移: SHR op
(1). 求补运算: NEG op (2). 求反运算: NOT op (3). 与运算: AND dest,source (4). 或运算: OR dest,source (5). 异或运算: XOR dest,source (6). 逻辑左移: SHL op (7). 逻辑右移: SHR op
137
2.5.3.4. 程序控制指令 作用:控制程序流程。 (1)转移指令 无条件转移 条件转移 循环 :操作码 转移地址
:操作码 转移地址 :操作码 转移地址 转移条件 :转移条件为循环计数值 (2)转子指令与返回指令 转子:操作码 子程序入口地址 返回:操作码 返回地址 同一条返回指令应能提供多个不同的返回地址。 返回地址的存取: 用堆栈存放返回地址。
138
2.5.3.4.2. 80X86的常用程序控制指令 (1).无条件跳转: JMP dest (2).有条件跳转:
JZ dest ; JNZ dest (零标志) JCXZ dest (CX为0) JP dest; JPO dest (奇偶标志) JA dest (>); JAE dest(≥) JB dest (<) ; JBE dest(≤) JC dest ; JNC dest (进位标志) (3) 转子程序指令: CALL proc (4) 子程序返回指令: RET
139
2.5.3.4.3. 软中断指令 早期主要用于程序的调试 如 INT 3 指令 程序 … 自陷指令 调试程序 …… …
现在常常用于系统功能调用。 以 INT n 的形式出现在程序中。 表示不同的功能调用 如在DOS操作系统中,系统功能基本上都是以 INT 21 软中断提供调用,调用需要的参数通常由通用寄存器EAX、EBX、ECX、EDX提供
140
第二章结束
Similar presentations