软件基础
- 电脑的字长
字长是指运算器中一条指令的二进制位数,是 CPU 与输入/输出设备和存储器之间传送数据的基本单位。由于二进制数的位在电脑里有一个专门的术语,叫“比特(BinaryDigit 的缩写,读 bit)。所以字长的单位也是“比特”。早期的电脑的字长都是 8bit,因此又叫八位机;PC 机为 16bit,因此叫 16 位机;386DX 及机子 CPU 内部为 32 位,外部为 16 位,就叫准 32 位机;486 以上机型都为 32 位机,大型机长达 64bit。电脑的字长表明了电脑数据总线的宽度。
- 字长的作用
八位二进制数最小是 00000000。最大是 11111111,总计 256 个。换句话说,一组八位二进制数可以表示 256 种状态。英文字母只有 26 个,但可以表
达各种语言信息,十进制的数只有 10 个,加上正负号和小数点,一共 13 个
符号就能表明各种数值。有了这 256 种状态,这相当于有了 256 种不同的符
号、把这 256 种符合再进行各种不同的组合,就可以表达各种信息。电脑要表达的语言、文字、数字等信息都是靠字长来组合。人们对电脑编制的各种指令、各种操作码、地址码也要根据电脑的字长来设计。可见不同字长的电脑有不同的操作指令和寻址编方式,字长越长,表达的方式就越灵活,表达的内容就越广泛。自然而然,字长越长的电脑,其速度就越快,功能就越强。
- 电脑的字节
在电脑里,一串 8 个二进制数组成一个字节。也就是说,一个字节表示
一个 8 位二进制数。8 位二进制数可以有 256 种不同的编码,每个编码正好对应 ASCⅡ码一个符号的编码。一个汉字的编码通常需要两个字节来存放。在存储器中,以字节为单位进行编址,通常一个字节赋予一个地址。在
32 位以上字长的机型中,也可以用 2-4 个字节来表示一个地址。
描述电脑存储容量和磁盘容量时,常说多少 K、多少 M,就表明可以存多少个字节。字节的单位有 k、M、C 等等。
2 的 10 次方字节为 IK 字节。IK=1024 个字节。360K 的磁盘可存 360×
1024 个字节。
2 的 20 次方字节为 IM 字节。又叫兆字节 MB,IM=1024×IK 约为百万字节。
2 的 30 次方字节为 1G 字节。又叫吉字节 GB,IG=1024×IM 约为 10 亿字节。
由于电脑是两个字节存储一个汉字。因此,在电脑磁盘存汉字时,所存字数是字节数的一半。
- 内存地址
地址是用来表示存储器或输入/输出设备位置的。每一个地址对应一个存储单元,可以存放一个字节的数据,在 8 位微处理器中,通常用 16 位地址线
来指定地址。16 条地址线可以指定为 2 个 16 次方即 65536 个不同的存储单
元。用 16 进制表示时,地址编码的范围为 0000~FFFFH。FFFFH 是 16 位 1 的一组二进制数,用 FFFFH 来表示的地址有 65536 个,即 64K 的内存地址。为了提高电脑的内存数,一般的 8 位至 16 位机都是用 20 位二进制数来表示地址。这就可以表示 1024K 即 1 兆的地址。
电脑的内存其实就是这么一些连续的地址。内存大,地址也多,可运行的程序也大;内存小,地址也少,可运行的程序也相对地小。
- 不同的寻址方式
立即寻址是在指令中直接给出了操作数,即操作数紧跟在操作码后头, 取指令的同时也就取出了地址。
直接寻址是指令中的地址码是操作数的有效地址,用这个有效地址访问一次存储器便获得了地址。
间接寻址是指令中的地址只是操作数的间接地址。CPU 要访问两次存储器,第一次从指令中找间接地址,再从存储器中的间接地址去找操作数的有效地址。
变址寻址是设一变址寄存器(如 SI 为源变址器,DI 为目的变址器)在指令中的地址段给出一个形式地址。
- 常规内存和上位内存区
常规内存是电脑内存区的开始 640K 字节的空间。内存管理是 DOS 对程序使用的内存空间进行地址分配的活动。在总线地址为 20 位的电脑中,可以寻址的地址内存空间为 220=1024(IM)。其中,低 640K 以内的内存地址为常规内存,用于程序和数据,也包括 DOS 自身的使用。在 MS-DOS 启动后,不需要运行其它内存管理程序就实现了对这一内存区域的管理。如果在CONFIG.SYS 中没有 DOS=HIGH 的命令,DOS 自身就全部驻留在这一空间内。常规内存是任何电脑都具有的最基本内存。
上位内存区又叫 UMA。是紧接 640K 字节常规内存后的 384K 的内存区域。上位内存区一般用于保留供系统 ROMBIOS、视频 ROMBIOS 和缓冲区,以及各种硬件接口卡使用,因此也称为保留内存。早期的 PC 机,DOS 只能管理和使用 640K 的内存范围,在上位内存位尽管也还有一些未用的存储地址(这些地址叫上位地址块,称为 UMB),但不在 DOS 的管理范围之内。
- 扩页内存
为了使 DOS 能够管理 640K 以上的更大内存,在 80 年代中期出现了扩页内存技术。其前提是要在硬件上安装扩页内存板,并且在软件上安装扩页内存驱动程序。然后在上位内存内存区分配 640K 的 UMB 作为页框,而把扩页内存板上的内存以 16K 为一页,当需要使用扩页内存时,把所需的页映射到上位内存区的页框里,用这种方法,可以访问 32M 的扩页内存。由于人们制定了使用扩页内存的 EMS 规范,因此扩页内存又叫 EMS 内存。
- 扩展内存
也有的把扩展内存叫做扩充内存,而把上面讲到的扩页内存叫做扩展内存。由于 286 使用了 24 位地址总线,386 和 486 使用了 32 位地址总线,这样 286 的寻址能力达到 16M(224B),386 和 486 的寻址能力达到了 4G(232B)。但 SOS 使用的是实模式,即还是 20 位的地址总线,因此寻址空间仍然只是IM。人们把地址在 FFFFFH 以上(即 lM 以上)的内存地址称为扩展内存。为了让 DOS 使用这些扩展内存,人们制定了扩展内存的 XMS 规范,因此扩展内存又叫 XMS 内存。(如下图)
、
- 高端内存区
高端内存区是扩展内存中的第一个 64KB 区域,又叫 HMA
(HighMemoryArea)。在 286 以上的机型中,通过启动第 21 条地址线 A20, 可在实模式下进行访问。DOS5.0 以上的版本中有两个驱动程序,一个是HIMEM.SYS,另一个是 EMM386.EXE,它们都是按 XMS 标准对扩展内存和高端内存进行管理的程序。其中 EMM386.EXE 是专门为 386 以上的电脑设计的。它有两个作用:一是使 DOS 能够访问上位内存区,使其它设备驱动程序和内存驻留程序能够被装入 UMB。二是在没有扩页内存板和驱动程序的电脑里,也可以用扩展内存来仿真扩页内存。并且换页效果大大提高。
- 缓冲区
在内存开辟的存储区,用于在电脑中传送数据时存放信息,键盘、磁盘驱动器和视频显示都要使用缓冲区。
键盘缓冲区是一个 15 个字符的循环队列。在其中,键盘中断存放输入的字符。
显示缓冲区是在内存中留出来保存在屏幕上显示信息的区域。例如,彩色图形卡使用 16K 缓冲区,显示电路连续扫描使用缓冲区将缓冲区中的内容译码,并投射到屏幕上。
- 寄存器
在电脑中用来暂时存储一位、一个字符或一个字的存储装置。在 IBM 微机中,绝大多数寄存器都是 8 位或 16 位。CPU 上的寄存器从内存获得数值, 当其被进行加、乘等操作时保存之。视频控制芯片上的寄存器被设备视频特征的数据初始化。
段寄存器是 CPU 上指向内存段的开始位置的四个寄存器之一。寄存器中的值被自动乘以 16,以便指到 1 兆字节 CPU 地址空间的 65535 个 16 字节边界之一。段寄器的名字分别是 CS(代码段)、DS(数据段)、SS(堆栈段)、ES(扩展段)。
状态寄存器是保持描述一设备当前状态的位模式的输入/输出寄存器。12.堆栈
在内存中,一个特定的存储区。它的一端是固定的,另一端是浮动的。对这个存储区,所有的信息存入和取出都只能在浮动的一端进行,并且符合后进先出的原则。堆栈简称为栈。
- 驻留程序
运行结束仍保留在内存的程序。DOS 能防止被后续装入的程序覆盖,这些程序可利用中断向量来访问 DOS 所含有的子程序。
- 电脑的指令
指令是电脑执行某种操作的命令。电脑每一步工作都是一长串的二进制的数字运算的过程。或者从哪个寄存器取出一个数进行各种运算或者接通一个输出输入设备,或者从字库中提取一个字形点阵数字送到打印机上变成打印针的动作⋯⋯,不管是哪种操作都要指出操作数在什么地方,送到什么地方去执行(地址)。因此,一台电脑功能的好坏从某种角度讲就是指令的好坏。指令系统是机器语言,由于机器语言是电脑内部的功能所在,同时又是电脑的硬件系统,是软件和硬件的结合的界面,即接口。CPU 能够识别的指令是用二进制编码的机器语言指令。不同的电脑中,基本指令和寻址方式都不完全相同。
- 指令格式
指令既然是机器能识别的机器语言,则必然是一种二进制编码。指令长度一般就是电脑的字长度,也就是说 8 位机的指令为 8 位二进制,16 位机则
16 位字长,32 位机的指令就是 32 字长。指令长短不一样,因而不同长短的指令数量也不一样,长指令所占字节的长度长,可以设置的指令也多:反之亦然。
指令分为单字节指令、双字节指令和 3 字节指令三种指令格式。不论哪种指令格式,第一个字节总是操作码,它决定了 CPU 完成的操作类型。单字节的操作码本身就隐含了操作数是在微处理器内部的一个寄存器中。双字节及三字节的第二字节或第二、三字节是给出了立即操作数或操作数所在的地址。显然,指令字长越短,执行指令的速度就愈快;反之,指令越长,就需要更多的时间来从存储器中取出它的字节。
17.指令类型
电脑指令是面对电脑的。因此不同的电脑有不同的指令,指令的数量也不尽相同。但从类型上分,不外乎都有运行指令、传送指令、控制指令、输入输出指令、特殊指令之分。