计算机中的信息表示

本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-04-18

数值型数据的展示

进位计数制及其相互转换

基数:任何一种计数制允许选用的数字符号的个数叫做计数,例如二进制只有0、1,则基数2,十进制有0~9,则计数是10。几进制基数是几,记作r。

位权:一个数字符号出现在数字中的不同数位上,其所代表的数值是不相同的,一个数字符号所表示的数值就等于该数值乘以一个与它所在数位有关的常数,这个常数叫做位权,位权的大小是以技术为底,数字符号所在位置的序号为指数的整数次幂,记作 ri

(1)二进制、十六进制转十进制

(11101.1101)2 = 1 * 24 + 1 * 23 + 1 * 22 + 1 * 20 + 1 * 2-1 + 1 * 2-2 + 1 * 2-4

(5F3B.AC)16 = 5 * 163 + 15 * 162 + 3 * 161 + 11 * 160 + 10 * 16-1 + 12 * 16-2

(2)十进制转二进制

整数部分除2取余数,小数部分乘2取整(取到所要求的精度为止)

十进制转二进制

比较小的数可以使用这种方法,稍微大一点可以直接除16,用得到的余数转换成二进制的后4位,再将得到的商的二进制数拼接在前面。

(50)10 = 50 / 16 = 3 余 2 = 0011 0010

原理就是除以 2n,使用得到的余数组成二进制的后n位,在与商的二进制数组合。

(100)10 = 100 / 8 = 12 余 4 = 01100 100

(3)十六进制转二进制

不论是十六进制数的整数部分或小数部分,只要把每一位十六进制数用等值的四位二进制数代替即可。

(3AB.7E)16 = (0011 1010 1011.0111 1110)2

(4)二进制转十六进制

整数部分由小数点向左四位一组,小数向右四位一组,不足四位补0,然后将每四位等值转为十六进制即可。

(101110101011010.101101)2 = 0101 1101 0101 1010.1011 0100 = 5 D 5 A . B 4 = (5D5A.B4)16

非数值型数据的表示

汉字编码

汉字内码:用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。

汉字输入码:直接使用西方标准键盘把汉字输入到计算机,当前采用的方法有:区位码、拼音码、字形编码、语音识别、图像识别。

汉字字形码:存储在计算机内的汉字在屏幕上显示或在打印机上输出时,需要知道汉字的字形信息,就要采取专门的字形码。目前的汉字处理系统中,字形信息的表示大体有两类形式:一类用活字或文字版的固体字形形式,另一类是点阵表示法或矢量表示法,大多是点阵表示法,就是将字符的字形分解成若干“点”组成的点阵,如果用二进制的“1”表示黑色点,用“0”表示没有笔画的白色点,则有16x16,24x24、32x32点阵,甚至更高,点阵越大,描述的字形越细致美观,质量越高,但所占存储空间也越大。

数据校验码

由于元件故障、噪声干扰等各种因素,常常导致计算机在处理信息过程中出现错误,为了防止这种错误,通常的方法就是在每个字上添加一些校验位,用来确定字中出现错误的位置。

奇偶校验法,就是:

设 X = (X0X1…Xn-1),

则有,偶校验位为:C = X0⊕X1⊕ … ⊕Xn-1,(异或,不同为1,相同为0)

所以,只有 X 中包含偶数个1时,才使 C = 0;

当接收方接收到之后,按照上面的公式计算出C,在计算出 F = X0⊕X1⊕ … ⊕Xn-1⊕C,若F = 1,意味着接受到的信息有错,若F=0,表示X字传送正确。

指令信息的表示

指令是指示计算机硬件执行某种操作的命令。CPU就是根据指令指挥和控制计算机各部件协调工作,实现对信息的加工和处理的。一台计算机所有指令的集合构成该机器的指令集,也称为指令系统。

对于机器设计者来说,首先要规定指令系统所包含的各种基本功能,这些功能由硬件来实现,指令系统与计算机的硬件结构紧密相关,反映了这台机器所具有的硬件功能。

对于程序设计者来说,通过指令系统的学习可以知道计算机能实现哪些功能以及为程序设计提供哪些硬件支持等,因此指令是程序员进行程序设计的基本出发点和最小单位,指令系统常用汇编语言来描述,便于人们分析与设计,但是硬件最终执行的还是机器语言表示的二进制代码序列。

从计算机组成的角度来说,指令系统是软件和硬件的交界面,了解指令及其执行过程,是掌握计算机工作原理的关键之一。

指令系统主要包括指令格式、寻址方式、指令类型与指令功能等。

指令格式

指令格式就是指令用二进制代码表示的结构形式,通常由若干个字段构成,主要包括操作码和地址码。

操作码OP 地址码D
  • 操作码指明计算机应进行什么性质的操作,如加减乘除、数据传送、移位等
  • 地址码指明操作的数据或数据存放的地址。

1、根据指令码中提供操作数地址的个数可以分为以下四种:

  • 零地址指令格式:只有操作码,没有地址码,如空操作指令,停机指令。

  • 一地址指令:分为两种,一是这个操作数既是操作数的地址,又是操作数结果的存储地址,例如,逻辑非、加1指令等。二是指令中给出一个操作数,而另一个操作数隐含在CPU的某个寄存器中,如累加器。

  • 二地址指令格式:指明参与操作的两个操作数地址,分别为源地址D2和目的地址D1。

操作码OP 地址码D1 地址码D2

指令功能:(D1) OP (D2) -> D1,对两个操作数进行OP所规定的操作,结果存入D1,D1中原来的值被覆盖。

  • 三地址指令格式:分别指明参与操作的三个操作数地址。
操作码OP 地址码D1 地址码D2 地址码D3

指令功能:(D2) OP (D3) -> D1。对D2、D3进行OP所规定的操作,结果存入D1。

该指令格式的优势是,操作结束后,D2、D3 中的内容均未被破坏,缺点是增加一个地址后使得指令码加长,增加了存放空间,加大了取指令时间。

2、在双操作数指令中,从操作数的物理位置来说,分为以下三种:

  • 寄存器——寄存器型指令 (RR):操作数都放在CPU内寄存器中,从寄存器中取出操作数处理,操作结果存放在目的操作数所在的寄存器中,因此不需要访问存储器,机器执行速度很快。

  • 存储器——存储器性指令 (SS):与上面一样,只不过存储数据,操作结果都是从存储器中进行存或取,因为机器执行指令需要多次访问存储器,所以执行速度很慢,有些计算机不设置这类指令。

  • 寄存器——存储器指令 (RS):操作数在一个寄存器中,另一个在存储器单元中,操作结果可以放在寄存器或存储单元中,执行此类指令时,既要访问存储器,又要访问寄存器,以此速度介于上面两种之间。

指令字长度

每一条机器指令都是一串二进制代码,称为指令字。指令的长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的长度与个数。

指令长度等于机器字长的指令称为单字长指令,同样还有半字长指令、双子长指令。

若所有的指令长度都是相等的,则称为定长指令结构。定长指令结构的指令系统控制简单,但指令编码效率低、不够灵活,所以采用定长指令结构,只选取简单、常用的指令,称之为精简指令系统计算机 (Reduced Instruction Set Computer, RISC)

若各种指令长度随指令功能而异,有的指令单字长指令,有的双字长指令,称为可变长指令字结构。这种指令字结构复杂,指令的译码控制较复杂,但是指令编码效率高、灵活,能充分利用指令长度表示更多的信息,被广泛采用,采用这种指令字结构的,称之为复杂指令系统计算机 (Complex Instruction Set Computer, CISC)。

寻址方式

指令中以什么方式提供操作数或操作数地址,称为寻址方式。CPU 根据指令约定的寻址方式对地址字段的有关信息作出解释,以找到操作数或操作地址(或程序转移地址)。

有的指令通过操作码的含义隐含约定采用何种寻址方式,而有的指令则设置专门的寻址方式编码字段,以说明采用何种寻址方式。

1、立即寻址

操作数跟在操作码的后面,指令的地址字段直接给出了操作数,在取出该指令的同时,也就取出了可以立即使用的操作数,这样的数称为立即数。

例如,在 8086 微机的汇编语言指令中(后文都以 8086 微机的汇编指令为例)立即寻址方式如下:

MOV AL, 26H; # 将立即数26H传送到AL寄存器中

2、寄存器寻址

指令的地址码字段给出某一个通用寄存器的编号(地址),该寄存器中存放着操作数。例如:

MOV BL, DL; # 将DL寄存器中的内容传送到BL寄存器中

寄存器寻址方式有两个明显的优点:

  • 从寄存器中存取数据比从存储器单元中存取快得多
  • 由于寄存器的数量较少,其地址码字段比存储单元地址字段要短得多

寄存器寻址方式可以有效地缩短指令码长度,提高指令的执行速度。几乎所有的计算机都采用了这种寻址方式。

3、直接寻址

指令的地址码字段直接给出的是操作数的有效地址EA。用这个有效地址访问一次存储器,便可以从制定的存储单元中获得操作数。由于这样给出的操作数地址是不能修改的,与程序本身所在的位置无关,所以又叫绝对寻址方式。

例如:

MOV AL, [2050H]; # 将2050H作为操作数的地址,从2025H号存储单元中取出操作数传送到AL寄存器中

这种寻址方式的特点是:不需要任何寻址运算,简单直观,也便于硬件实现,但寻址空间受到指令中地址码字段位数的限制。

4、寄存器间接寻址

指令中的值码给出了某一通用寄存器的编码,以该寄存器中的内容为有效地址EA,用这个有效地址访问以此存储器,便给从指定的存储单元中获得操作数。

例如:

MOV AH, [BX]; # 将BX寄存器中的内容作为操作数的有效地址 从该地址指定的存储单元中取出操作数传送到AH寄存器中

这种寻址方式的特点:指令码较短,并且在取指后只需以此访存便可得到操作数,是一种广泛使用的寻址方式

5、存储器间接寻址

与寄存器间接寻址类似,通常在指令格式中划出一位作为直接或间接寻址的标志位I,间接寻址时,标志位I = 1。这时,指令中的地址字段给出的是操作数地址的地址,即操作数的地址存放在指令的地址字段指定的某个(被称为间址的)存储单元中,因此至少需要访问两次(单重间址)或两次以上(多重间址)存储器才能获得操作数。

存储器间接寻址

主要优点:

  • 扩大了寻址访问,可用指令中的短地址访问大的存储空间。
  • 可将存储单元(或寄存器)作为程序的地址指针,用以指示操作数在存储器中的位置。当操作数的地址需要改变时,不必修改指令,只需修改存放有效地址的那个存储单元(或寄存器)的内容即可。

但是间接寻址在取指之后至少需要两次访问存储器才能取出操作数,降低了取操作数的速度。尤其是在多重间接寻址时,寻找操作数要花费相当多的时间,甚至可能发生间址循环。

6、变址寻址

变址寻址就是把变址寄存器Rx的内容(变址值)与指令中给出的形式地址D相加,形成操作数的有效地址EA,即EA = Rx + D。

例如:

MOV CL, [SI+2050H];
# 将变址寄存器SI中的内容加形式地址2050H之后的结果作为操作数的有效地址EA
# 从该地址指定的存储单元中取出操作数传送到CL寄存器中

变址寻址速度比直接寻址慢,因为CPU必须执行一次加法操作才能获得有效地址。

7、相对寻址

相对寻址方式是变址寻址的特例,它以程序计数器PC为变址器,与指令提供的形式地址相加,从而得到有效地址EA。

8、基址寻址

当存储器的容量较大、所需地址码的长度大于字长时,由指令地址码字段直接给出的地址就不能直接访问到存储器的所有单元。解决的方法通常是把整个存储空间分成若干个段,段的首地址存放在基址寄存器中,段内位移量由指令直接给出,存储器的实际地址就等于基址寄存器的内容(即段首地址)与段内位移量之和,这样通过修改基址寄存器的内容就可以访问存储器的任意单元。

指令的类型及基本功能

1、数据传输类指令

用于实现寄存器与寄存器、寄存器与存储器单元以及两存储器单元之间的数据传送操作。数据传送时,数据从源地址传送到目的地址,而源地址中的数据保持不变。

(1)通用数据传送指令

可以一次传送一个数据,也可以传送一批数据。有些机器还设置了数据交换指令,它完成源操作数与目的操作数互换,实现双向数据传送。

(2)堆栈及堆栈操作指令

堆栈是由若干个连续存储单元组成的先进后出 (First In, Last Out, FILO) 存储区,栈底是固定不变的,而栈顶却是随着数据的入栈和出栈在不断变化。为了表示栈顶的位置,用一个寄存器指出栈顶的地址,这个寄存器称为堆栈指针 (Stack Pointer, SP),任何堆栈操作只能由SP控制在栈顶进行。

由于先进后出的特性,因而在中断服务程序、子程序调用过程中广泛用于保存返回地址、状态标志及现场信息等。另一个重要作用是在子程序调用时利用堆栈在主程序与子程序之间传递参数。例如,首先把所需传递的参数压入堆栈中,然后调用子程序。

2、运算类指令
  • 算术运算指令:常见的加减乘除、比较、求补、浮点运算、十进制运算,设置高档机还有向量运算指令,对整个向量或矩阵进行求和、求积运算。
  • 逻辑运算指令:与、或、非、异或和测试等逻辑运算指令,有的还设置了位操作指令,如位测试、位清除、位求反等操作。
3、移位操作指令

(1)算术移位

算术移位的对象是带符号数,左移时,末位补0;右移时,必须保持操作数的符号为不变。当左移一位时,如不产生溢出,则数值乘2;而右移一位时,如不考虑因移出舍去的末位尾数,则数值除2。

(2)逻辑移位

逻辑移位的操作数是无符号数,与算术移位主要的差别在于右移时,填入最高位的数据不同,算术右移保持最高位(符号位)不变,逻辑右移最高位补0。

(3)循环移位

循环移位按是否于进位位C一起循环,又分为自身循环(小循环)与大循环(带进位循环),主要用于实现循环式控制、高低字节互换等。

4、字符串处理指令

字符串处理指令就是一种非数值处理指令,一般包括字符串传送、字符串转换编码、字符串比较、字符串查找、字符串匹配、字符串抽取和替换。

5、输入/输出指令

I/O 指令主要用来实现CPU与外部设备之间的信息交换,包括输入/输出数据、CPU向外设发控制指令或外设向CPU报告工作状态等。

操作码OP 寄存器R 地址码A

R为外部设备交换信息的CPU内寄存器;A 为外部设备的地址(即设备号),长度一般为8~16位,可以表示 256~64K 个 I/O 设备号。

例如,输入指令完成从A地址所指定的外部设备中读取一个数据到R存储器中,输出指令是把R寄存器中的数据送到A地址所指定的外部设备中。

6、程序控制指令

程序控制类指令用于控制程序的执行顺序,并使程序具有测试、分析与判断的能力。

(1)转移指令

通常采用转移指令来改变程序的执行顺序。又分为无条件转移指令和条件转移指令等。

  • 无条件转移指令不受任何条件约束,直接把控制转移到所指定的目的地,从那里开始执行,因而又称为必转,其助记符为JMP。
  • 条件转移必须受到条件的约束,若条件满足时才执行转移,否则程序仍顺序执行。

(2)子程序调用指令

子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它,通常把一些需要重复使用并能独立完成某种特定功能的程序单独编程子程序,在需要时由主程序调用,这样既简化了程序设计,又节省了存储空间。主程序与子程序是相对的概念,调用其他程序的程序是主程序,被其他程序调用的程序是子程序。

从主程序转向子程序的指令称为子程序调用指令,简称转子指令,其助记符一般为CALL,转子指令是一地址指令

转子指令和转移指令都可以改变程序的执行顺序,但两者存在很大的差别:

  • 转移指令使程序转移到新的地址后继续执行指令,不存在返回的问题,所以没有返回地址。而转子指令要考虑返回问题,所以必须以某种方式保存返回地址,以便返回时能找到原来的位置。
  • 转移指令用于实现同一程序内的转移,而转子指令转去执行一段子程序,实现的是不同程序之间的转移。

返回地址是转子指令的下一条指令的地址,保存返回地址的方法有:

  • 用子程序的第一个单元存放返回地址
  • 应寄存器存放返回地址
  • 用堆栈保存返回地址

(3)子程序返回指令

从子程序转向主程序的指令称为返回指令,助记符一般为RET,子程序最后执行的一条指令一定是返回指令。

7、其他指令
  • 特权指令:具有特殊权限的指令,在多用户、多任务的计算机系统中,特权指令是不可少的,它主要用于系统资源的分配和管理等工作。

  • 陷阱与陷阱指令:陷阱实际上一种意外事故中断,中断的目的不是为请求CPU的正常处理,而是为了通知CPU所出现的故障,并根据故障情况转入相应的故障处理程序。在一般的计算机中,陷阱指令作为隐指令不提供用户使用,只有在出现故障的时候才由CPU自动产生执行。

总结

信息表示“数字化”这个重要的概念是人们理解计算机工作原理的一个基本出发点。它通常包含了两层含义:

  • 一是计算机中的各种信息均用二进制数字代码表示,包括数值型的数字,非数字型的字符、图像、声音等和逻辑型的指令信息、状态信息等;

  • 二是物理实现上采用数字电信号来表示数字代码,即二进制数字代码中的每一位数字用一位数字信号表示,例如,用高电平信号表示“1”,低电平信号表示“0”;或者用脉冲状态表示“1”,无脉冲状态表示“0”。

因此只要事先将各种信息“数字化”,或者将各种非电量类型的信号转换为电信号,模拟电信号转换为数字电信号,计算机就可以表示或处理这些数字化的信息,从而使计算机处理的信息类型和范围几乎不受限制。

下图 a 为电平信号,b 为脉冲信号。

数字信号表示数字代码