当一个微处理器首次上电或复位时,它会从特定的内存地址开始执行机器代码。在英特尔的8080系统中,这个地址就是0000h。通过上电启动,会有一条机器代码指令被载入到该内存地址中。
那么机器代码指令是怎么加载到那个内存地址的?
微处理器复位的时候需要执行一些代码,称为初始化代码。堆栈指针在运行初始化代码的时候会被设置,以保证堆栈处在内存的有效区域。为了不让屏幕上显示随机字符,初始化代码还把视频显示器内存中的每个字节设置成十六进制数20h,在ASCII码中这是一个空格符。此外,初始化代码还把光标定位在第一行第一列的位置——OUT(output)指令可以完成这一操作:光标在视频显示器上是以下划线的形式出现的——它可以显示出下一个要输入字符的位置。为了使微处理器能响应键盘中断,必须设置EI指令开中断,而HLT指令可以使微处理器停止工作。
执行了HLT指令后,计算机处于停机状态。为了把计算机从停机状态唤醒,只能通过复位信号或者键盘的中断信号来实现。
键盘处理程序内含有一个命令处理程序,它可以解释如下的三条命令:W命令、D命令、R命令。
W把若干字节写入到内存中。如:W 1020 35 4F 78 23 9B AC 67
命令处理程序会从内存地址1020h处开始,把35、4F等十六进制表示的字节写入内存中。
D命令把内存中一些字节显示出来。如D 1030
命令处理程序会从1030h处开始的11个字节内容显示出来(这里说的11,是在每行可容纳40个字符的显示器上,除去显示命令与地址标识,后面能显示的也只有这么多了)
R表示运行。如 R 1000
处理器会运行从地址1000h开始的一段程序。首先命令处理程序把1000h存储在寄存器对HL中,接着执行PCHL(把HL所存储的值加载到程序计数器中,然后跳转到程序计数器所指向的地址并运行程序)。
可以把命令处理程序代码存到ROM中去。也可以用内存和存储器来回存取来实现,比ROM灵活。
RAM板与一个DIP开关相连,有了这个开关就可以设定RAM板的起始地址了。8080系统再初始化时,其中一个RAM板的起始地址被设置为0000h。但如果有ROM的话,这个地址会被其占用,而RAM转到更高的地址。
还有S命令(Store)和L命令(Load)需要添加,这些东西存储在磁盘的什么位置需要手工记录下来,出于这个原因,文件系统应运而生。把数据组织成文件。
开机启动时,磁盘上最开始的128字节扇区的内容,会首先由引导程序加载到内存并运行,整个扇区包含有特定的代码。整个过程称为操作系统的引导。
操作系统引导完成后,RAM的最高地址区域用来存放系统。加载完后,整个内存空间组织结构如下:
CCP、BDOS、BIOS是早期的操作系统CP/M的三个组成部分,仅占用6KB。大约58KB被临时程序区占用,但是这58KB一开始是空的。
利用命令和实用程序对文件进行基本操作,如何将程序加载到内存中并运行,提供程序接口以便访问计算机的硬件 等是操作系统几个重要功能
BIOS是唯一需要了解计算机中硬件的程序,其他一些对硬件的操作都可以通过调用BIOS中的子程序来实现。
说道操作系统 不得不说到UNIX,为了让多个人操作同一台计算机,UNIX使用了时分复用技术,允许多个用户访问终端。
一个操作系统可以同时运行多个程序,称此系统为多任务操作系统。显然和CP/M和MS-DOS这样的单任务系统相比,这种要复杂得多。内存不够怎么办,操作系统心如了虚拟内存技术。