第 2 章 计算机中的信息表示 学习目标: 掌握常用的进位计数制及其相互转换方法。 掌握原码、补码的表示方法及其相互转换,了解反码表示方法。 第 2 章 计算机中的信息表示 学习目标: 掌握常用的进位计数制及其相互转换方法。 掌握原码、补码的表示方法及其相互转换,了解反码表示方法。 掌握定点数、浮点数表示方法,能根据给定的格式定出典型值。 学会查用ASCII表,了解汉字编码的基础知识。 掌握常用寻址方式,I/O编址方法;理解指令格式的基本概念,了解常见的指令功能分类。
§ 2.1 数值型数据的表示方法§ 2.1.1 进位计数制 一.计算机中常用的进位制: 名称 进位制 基本数码 基数 二进制 逢二进一 0、1 2 八进制 逢八进一 0-7 8 十进制 逢十进一 0-9 10 十六进制 逢十六进一 0-9、A、B、C、D、E、F 16 二-十进制
科学计数法: (S)10=Xn10n+ Xn-110n-1+…+ X0100+ X-110-1+ X-210-2+…+ X-m10-m 实际上,这是其他进制转换成十进制的一种方法。 其他进制数的表示方法: (101.01)2=1*22+0*21+1*20+0*2-1+1*2-2=(5.25)10 (703.64)8=7*82+0*81+3*80+6*8-1+4*8-=(451.8125)10 (BC3.89)16=11*162+12*161+3*160+8*16-1+9*16-2=(3011.535)10
二--十进制又称为8421码 与常规十进制一样,每位二—十进制数只允许选用0-9中的一个,逢十进一,用二进制编码表示十进制数,这种编码又称为BCD码。 例:(137)10=(0001 0011 0111)BCD 即用4位二进制数表示1位十进制数,从高位起这4位的权依次是23、22、21、20,即8,4,2,1。所以这种编码又称为“8421码”。
二、各种进位制之间的相互转换: 1.十——二进制数之间的转换 (1)十—二进制的整数转换 减权定位法:逐位分离 分别进行整数和小数的转换 1.十——二进制数之间的转换 (1)十—二进制的整数转换 减权定位法:逐位分离 除基取余法:除2取余,余数倒排列。 (见教材P27页)
减权定位法: 例:(116)10=(1110100)2 减权比较 Xi 位权 116-64=52 1 64 52-32=20 32 减权定位法: 例:(116)10=(1110100)2 减权比较 Xi 位权 116-64=52 1 64 52-32=20 32 20-16=4 16 4<8 8 4-4=0 4 0<2 2 0<1
(2)十—二进制的小数转换 减权定位法:(与整数转换所用不着减权定位法相似,但转换后得到的二进制小数可能是一个“不尽”的小数,其规定的字长或实际需要的精度来决定。) (0.625)10=(0.101…)2 减权比较 Xi 位权 0.635-0.5=0.135 1 0.5 0.135<0.25 0.25 0.135-0.125=0.010 0.125 …
乘基取整法 例:(0.625)10=(0.101)2 见板书
(3)二—十进制的整、小数转换 二—十进制的整、小数转换可见前面介绍的类似“科学计数法”,即按权相加法 另外两种方法: 二—十进制的整数转换:逐次乘基相加法 二—十进制的小数转换:逐次除基相加法 见教材P29
0-F(15)与二进制的转换 1 2 3 10 11 4 5 6 7 100 101 110 111 8 9 A(10) B(11) 1000 1001 1010 1011 C(12) D(13) E(14) F(15) 1100 1101 1110 1111
2. 二——八进制数之间的转换 三位二进制转换一位八进制 3. 二——十六进制数之间的转换 四位二进制数转换一位十六进制
§ 2.1.2 带符号数的表示 真值——一个数的本身,包括正负号。 § 2.1.2 带符号数的表示 真值——一个数的本身,包括正负号。 机器数——在计算机中,常约定数的某一位表示符号,用0表示正号,用1表示负号,这种连同数符一起数码化了的数,称为机器数。 (1)机器数用二进制表示,其位数与机器字长有关。 (2)机器数的编码方法有原码、补码、反码,前两种为常用的,并且CPU支持二者的运算。
一、原码表示法 原码表示法约定:最高位为符号位,符号位为0表示该数为正,为1表示该数为负;有效数值部分用二进制绝对值表示。 X表示真值,[X]原为用原码表示的机器数,可简写成X原 原码表示法约定:最高位为符号位,符号位为0表示该数为正,为1表示该数为负;有效数值部分用二进制绝对值表示。 1.纯小数(定点小数X0X1…Xn)的原码定义 [X]原= x 0≤x<1 例:X=+0.1011——X原=0.1011 1-x=1+|x| -1<x ≤0 例:X=-0.1011——X原=1.1011
2.纯整数(定点整数XnXn-1…X0)的原码定义 [X]原= X 0≤X<2n 例:X=+1011——X原=01011 2n-x=2n+|x| -2n<X ≤0 例:X=-1011——X原=11011 3.使用原码表示数值的一结论。(见教材P30) 4.原码的特点:其表示较为直观,实现乘、除法较方便,加减法较复杂。
二、补码表示法 补码表示法的核心:是让符号位也作为数值的一部分直接参与运算,以简化加减运算的规则,同时以能“化减为加”。 X表示真值,[X]补为用补码表示的机器数,可简写成X补 补码表示法的核心:是让符号位也作为数值的一部分直接参与运算,以简化加减运算的规则,同时以能“化减为加”。 模的概念:类似于时钟的以12为计数循环,12即为模。 补码的定点小数的表示范围约为-1~+1,即以2 为模。
补码的统一式: [X]补=M+X(mod M) 1 .补码定义: (1)定点小数的补码(X0X1X2…Xn)定义式: [X]补= X 0≤X<1 例:X=0.1011——X补=X=0.1011 2+X=2-|X| -1 ≤X<0 例:X=-0.1011——X补=2-0.1011=1.0101 定点小数的补码的模为2 补码的统一式: [X]补=M+X(mod M) M为模 适用于正负数 符号位
(2)定点整数的补码(XnXn-1…X0)定义式: [X]补= X 0≤X<2n 例:X=1011000——X补=01011000 2n+1 +X= 2n+1 -|X| - 2n ≤X<0 例:X=-1011000——X补=28-1011000=100000000-1011000=10101000 定点整数的补码的模为2n+1 这里的n指定点整数的实际位数。
2.由真值、原码转换为补码: 由真值求补码,可先按真值写出原码(即加上符号位),再由原码转换为补码。 (1)正数的补码=原码 (2)负数原码转换成补码: 之一:“变反加1” 即:符号位保持为1不变,其余各位先变反,然后在末位加1。
之二:符号位保持为1不变,尾数部分自低向高位,第一个1 及其以前的各低位0都保持不变,以后的各高位则按位变反。 例:X原= 1 .(101011……) 10 X补= 1 .(010100……) 10 不变 变反 不变
3.由补码表示求原码、真值 (1)正数的补码=原码 (2)负数补码转换成原码可采取上述两种方法之一,作逆转换即可。 见教材P33 三、反码表示法 1.正数的反码=原码 2.负数的反码为:符号位为1,尾数由原码尾数按位变反。 例:X原=1.11010——X补=1.00101
§ 2.1.3. 数的定点表示与浮点表示 一、定点表示法 根据小数点的位置是否固定,在计算机中数的格式又可分定点表示与浮点表示两类。 § 2.1.3. 数的定点表示与浮点表示 根据小数点的位置是否固定,在计算机中数的格式又可分定点表示与浮点表示两类。 一、定点表示法 在计算机中,小数点的位置固定不变的数,叫定点数。有三种类型的定点数。
1 .无符号定点整数(即:略去符号位的正整数) n+1位的无符号整数Xn…X1X0, 表示范围:0~( 2n+1 -1) 分辨率为1,即也表明了它的绝对精度。 注意: (1)这里的n表示位置序号,n+1表示为实际位数。 (2)由于是正数,补码=原码 由绝对值最大负数到最大正数 最小非零正数
2.带符号定点整数(纯整数)Xn…X1X0 典型值 真值 代码 原码绝对值最大负数 -(2n-1) 11…11 原码绝对值最小负数 -1 符号位 2.带符号定点整数(纯整数)Xn…X1X0 典型值 真值 代码 原码绝对值最大负数 -(2n-1) 11…11 原码绝对值最小负数 -1 10…01 原码最小非零正数 +1 00…01 原码最大正数 2n-1 01…11 补码绝对值最大负数 -2n 10…00 补码绝对值最小负数 补码最小非零正数 补码最大正数
原码定点整数的表示范围: -(2n-1)~ (2n-1) 补码定点整数的表示范围: -2n~ (2n-1) 定点整数的分辨率为1
3.带符号定点小数(纯小数) 对于n+1位定点小数X0.X1…Xn 原码定点小数的表示范围: -(1-2-n)~ (1-2-n) 补码定点整数的表示范围: -1~ (1-2-n) 定点小数的分辨率为2-n 符号位
注意: 定点数的小数点位置是固定的,不需要设置专门的硬件或数位来表示。 定点数的表示范围是有限的,若运算结果超出表示范围,称为溢出,分正溢和负溢。 因此需要选择比例因子。
二、浮点表示法 浮点数:就是让小数点的位置根据需要而浮动。 一个浮点数由一个定点整数和一个定点小数组成,因此浮点运算是由两组相关的定点运算来实现的。
1.浮点数格式 浮点数的真值为: N=±RE M Ef Em Em-1 … E1 Mf M1 M2 Mn R 一般取2 数符 阶符 阶码E:即为比例因子RE部分的指数值 尾数M,为带符号定点小数,可用原码或补码表示。 图2-1:浮点数格式示例
2.移码(增码) 定义:X 移=2m+X - 2m≤X< 2m
3.表示范围与精度 见教材P37页 浮点数的表示范围取决于阶码的位数,相对精度取决于尾数的位数。 4.IEEE745标准浮点格式: 见教材P37
§ 2.2 字符表示 § 2.2.1 ACSII码 美国标准信息交换码,共有128个常用字符,如1-9,a-z(大、小写),运算符等。 每个ASCII代码均由7位编码组成,即为7个字节
§ 2.2.2 汉字编码简介 1.汉字输入码 2.汉字交换码 3.汉字内部码
§ 2.3 指令信息的表示 § 2.3.1 指令格式 1.指令格式 (1)操作码:指令中的若干位代码构成操作码,它表明该指令所要完成的操作是什么。它也是区别不同指令的主要依据。 操作码OP 地址码A
1 .指令格式 (2)操作数或操作数地址:指令应给出操作数(参与操作的数据)的有关信息。一般采用给出操作数存放的地址,即指令代码给出操作数地址信息,并指明CPU如何根据它们去寻找操作数(寻址方式)。 (3)存放运算结果的地址。 (4)后继指令地址。即给出当现行指令执行完后,到何处读取下一条指令的信息。
2.指令中的地址结构 显地址:在指令代码中明显地给出地址,这地址称为显地址。 隐地址:事先隐含约定操作数在某个寄存器中或在堆栈之中,而指令中并不给出地址码,这种隐含约定的地址称为隐地址。 采用隐地址(隐含约定),以简化地址结构,即减少指令中的显地址址数。例:对于常规的双操作数的运算,指令本应给予出4个地址,它们是两个操作数的存放地址、运算结果存放地址和后继指令地址。由于这种地址结构所需的位数太多,所以采用隐地址。
指令分别按A1与A2地址读取操作数,按操作码OP进行运算操作,然后将结果存入A3地址所指定的主存单元或寄存器。 按地址结构,实用指令分类: (1)三地址指令 格式: 功能: (A1)OP(A2) A3 指令分别按A1与A2地址读取操作数,按操作码OP进行运算操作,然后将结果存入A3地址所指定的主存单元或寄存器。 (PC)+n PC 隐含约定由程序计数器PC提供后继指令地址。 A1、A2分别是操作数1、2所在地的地址 OP A1 A2 A3 A3是运算结果存放地址 (A1)是按A1地址读取的内容即操作数1
A1是最终存放结果的目的地,由A1提供的操作数称为目的操作数。 (2)二地址指令 格式: 功能:(A1)OP(A2) A1 (PC)+n PC 指令分别按A1与A2地址读取操作数,按操作码OP进行运算操作,然后将结果存入A1地址所指定的主存单元或寄存器。 OP A1 A2 A1是最终存放结果的目的地,由A1提供的操作数称为目的操作数。
一是可用处理单操作数运算;二是可用来处理比操作数运算 (3)一地址指令 格式: 当OP为加1、减1、求反、求补时,指令为只有目的操作数的单操作数指令, 即:按A地址读取操作数,进行OP指定的操作,结果存回原地址。 记作:OP(A) A 当OP为加、减、乘、除时,隐含约定目的地的双操作数指令, 即按指令给出的源地址A可读取源操作数,从累加器AC的寄存器中读取目的操作数,运算结果存放在AC中。 记作:(AC)OP(A) AC OP A
堆栈是一种按“后进先出”存取顺序的存储组织,每次存取的对象是栈顶单元,该单元是浮动的,由一个堆栈指针SP寄存器给出栈顶单元地址。 指令中只给出操作码,没有显地址。 (4)零地址指令 格式: 当OP为空操作、停机指令时,不需要操作数的指令; 对累加器AC内容进行操作,而AC为隐含约定; 记作:OP(AC) AC 对堆栈栈顶单元内容进行操作 OP 堆栈是一种按“后进先出”存取顺序的存储组织,每次存取的对象是栈顶单元,该单元是浮动的,由一个堆栈指针SP寄存器给出栈顶单元地址。
3. 操作码结构 操作码的位数决定了操作类型的多少,同时当指令字长有限时,地址部分的位数与操作码的位数相互制约。 (1)固定长度操作码:操作码位数一定且位置固定。 (2)可变长度操作码 当指令中的地址部分位数较多时,让操作码的位数少; 当指令的地址部分位数减少时,可让操作码的位数增多,以增加指令的种类。 (3)单功能型或复合型操作码 单功能型操作码即让操作码只表示一种操作含义,主要是为了能够快速地识别并执行操作码; 复合型操作码即将操作码分为几个部分,可产生多种组合,使操作含义更加丰富。
主存是按编字节编址,所以指令字长为字节的整数倍 4. 指令字长 当指令字长有限时,地址部分的位数与操作码的位数相互制约。因此,指令字长的设计有两种方法。 主存是按编字节编址,所以指令字长为字节的整数倍 (1)变字长指令 将操作码放在指令字的第一个字节,当读出操作码后即可判定后的操作数指令。 (2)固定字长指令 是为了提高执行的速度,采取精简指令系统。
§ 2.3.2 常见寻址方式 寻址方式:指令中以什么方式提供操作数或操作数地址。 § 2.3.2 常见寻址方式 寻址方式:指令中以什么方式提供操作数或操作数地址。 CPU根据指令约定的寻址方式对地址字段的有关信息作出解释,以找到操作数。 一条指令之中可以有多种寻址方式。 寻址方式的种类:(1)立即寻址 (2)直接寻址类 (3)间接寻址类 (4)变址类
1.立即寻址 立即寻址方式:由指令直接给出操作数,在取出指令的同时出就取出了可立即使用的操作数,这种寻址方式称为~。 立即数的存放方式: 在指令之中—— 在指令之后—— OP 立即数 指令 立即数
2. 直接寻址 直接寻址:指令直接给出操作数地址,根据该地址可从主存中读取操作数。 主存 指令 寻址的过程: OP A 操作数 适合于寻找固定地址的操作数 2. 直接寻址 绝对地址:最后读取操作作数的有效地址。 直接寻址:指令直接给出操作数地址,根据该地址可从主存中读取操作数。 主存 指令 寻址的过程: OP A 操作数 A M 操作数地址 操作数 主存储器
3. 寄存器寻址(直接) 寄存器寻址:是在指令中给出寄存器号,在该寄存器内存放着操作数 示意图: 指令 RO 指令给出的寄存器号是RO,从RO中可直接读取操作数S 寻址过程:寄存器号 操作数 OP RO 操作数S R
通过多层读取来提供地址的可变性。 4. 间接寻址(简称:间址) 间接寻址:指令给出存放操作数的主存单元的地址。其中:存放操作数地址的主存单元称为间址单元,间址单元本身的地址码称为操作数地址的地址。 示意图;见教材P46页 指令中给出地址A1,据此访问间址单元,从中读取地址A2,按A2再访问一次主存,读取操作数S。 寻址过程: 间址单元地址 操作数地址 操作数 M M
5. 寄存器间址及其变型 寄存器间址方式:为操作数在主存中,由指令给出寄存器号,被指定的寄存器中存放着操作数有效地址。 由寄存器提供地址和修改寄存器内容,在比主存的读出和修改快得多。 采用寄存器间址方式能减少指令中一个地址码的位数。
5. 寄存器间址及其变型 示意图;见教材P47页 指令中在地址段给出的是寄存器号RO,从RO中读出的是操作数地址A,按A地址访问主存,从中读取操作数S。 寻址过程: 寄存器号 操作数地址 操作数 M R
先修改(指针内容减1)后操作(从主存读取操作数) 助记符:-(R) 寻址过程: 寄存器间址方式的两种变型: (1)自增型寄存器间址: 先操作(从寄存器中取地址)后修改(加1) 助记符:(R)+ 寻址过程:寄存器号 操作数地址 操作数 R内容加1 (2)自增型寄存器间址: 先修改(指针内容减1)后操作(从主存读取操作数) 助记符:-(R) 寻址过程: 寄存器号 寄存器内容减1为操作数地址 操作数 M R R M
一般将形式地址作为基准地址,变址寄存器内容作为修改量(又称为位移量、变址量) 6. 变址寻址 一般将形式地址作为基准地址,变址寄存器内容作为修改量(又称为位移量、变址量) 变址寻址:是指令的地址部分给出一个形式地址,并指定一个寄存器作为变址寄存器;寄存器的内容与形式地址相加,得到操作数有效地址;按照有效地址访问某主存单元,该单元内容为操作数。是通过地址计算使地址灵活可变 助记符:x (Ri) 寻址过程: 形式地址D 变址寄存器号 变址量N D+N=有效地址 操作数 R M
7. 基址寻址 基址寻址:指令中给出一个形式地址(作为修改量),并给出基址寄存器号,基址寄存器内容(作为基准量)与形式地址相加得到操作数有效地址。 主要解决 (1)程序重定位; (2)扩展有限字长指令的寻址空间。
变址寻址与基址寻址比较: 变址寻址 基址寻址 具体应用 由指令提供形式地址作为基准量,其位数足以指向整个主存 由基址寄存器提供基准量,其位数足以指向整个主存 变址寄存器提供修改量,其位数可长可短 指令给出形式地址作为位移量,其位数较短 应用目的 面向用户,可用于访问字符串、数组等成批数据 面向系统,可用来解决程序在实际主存中的重定位问题,以及在有限字长指令中扩大寻址空间。
8. 相对寻址 相对寻址:以当前指令中位置为基准,相对它进行位移(向前或向后)定位。 示意图:见教材P50。 程序计数器PC的内容为现行指令地址A,按地址A从主存中读取指令。指令中地址段给出位移量d,通过加法器进行A+d得出操作数地址,据此访问主存,从A+d单元中读取操作数。 指从现行指令位置到操作数S所在单元之间的距离(单元数)。
9 . 堆栈寻址 堆栈寻址:操作数在堆栈之中,指令隐含约定由堆栈指针SP寄存器提供堆栈栈顶单元地址,进行读出或写入。 示意图:见教材P50。
堆栈有关概念: 堆栈是一种按后进先出的存取顺序进行存取的存储结构。特别适合于子程序多重嵌套、递归调用、多重中断等方式 堆栈操作指令: (1)压入指令PUSH(进栈) (2)弹出指令POP(出栈) 堆栈操作过程: 初始化——压入——弹出
§ 2.3.3 指令类型 1.数据传送类指令: 定义:将指令从源地址传送到目的地时,源地址中的数据通常保持不变。 分类: 主要从指令功能和操作性质来分类 传送指令规定了每次传送的数据单位。 1.数据传送类指令: 定义:将指令从源地址传送到目的地时,源地址中的数据通常保持不变。 分类: (1)传送指令——实现CPU中各寄存器之间的传送。 (2)访存指令——实现主存单元与CPU寄存器之间的传送。 (3)I/O指令——实现I/O接口中的寄存器与CPU中寄存器之间的传送。
主机信息:来自于CPU的寄存器或主存单元。 实现主机与外围设备之间的信息传送 2. 输入/输出(I/O)指令: 主机信息:来自于CPU的寄存器或主存单元。 外围设备:是通过I/O接口与系统总线跟主机交换信息,接口中设置了一些寄存器和其他部件 外围设备的编址方法: 外围设备单独编址 外围设备与主存统一编址 I/O指令设置方法: 设置专用的I/O指令 用通用的数据传送指令实现I/O操作 通过I/O处理器或处理机控制I/O操作
3. 算术、逻辑运算指令 (1)算术运算指令: +、-、+1、-1、求补、比较大小等 (2)逻辑运算指令: 与、或、非、异或等 (3)移位指令: 算术移位:使数值发生变化而符号位不变。 逻辑移位:无正负性质,使代码列作循环移位或非循环移位。
4. 程序控制类指令 (1)程序转移指令:改变程序的执行顺序 无条件转移 条件转移指令 循环指令 (2)转子程序指令与返回指令:调用子程序以及返回主程序。 (3)软中断(程序自动中断)指令:可用来实现系统功能调用,也可用来在程序中设置断点,通过引出的中断处理程序帮助程序调试。 5. 其他