第五章总结
要完整地描述-一个内存单元,需要两种信息:①内存单元的地址;②内存单元的长度(类型)。用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出。[bx]同样也表示一个内存单元, 它的偏移地址在bx中,比如下面的指令:mov ax, [bx] 将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中。mov al, [bx] 将一个内存单元的内容送入al, 这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址在bx中,段地址在ds中。英文单词“loop"有循环的含义,显然这个指令和循环有关。我们在这一章,讲解[bx]和lp指令的应用、意义和相关的内容。3. 我们定义的描述性的符号: “()”为了描述上的简洁,在以后的课程中, 我们将使用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容。比如: (ax)表示ax中的内容、(al)表示 al中的内容。
loop指令的格式是: loop 标号,CPU执行loop 指令的时候,要进行两步操作,①(cx)=(cx)-1;②判断 CX中的值,不为零则转至标号处执行程序,如果为零则向下执行。从上面的描述中,可以看到,cx 中的值影响着loop 指令的执行结果。通常(注意,我们说的是通常)我们用loop指令来实现循环功能,cx 中存放循环次数。
我们在操作系统的环境中工作,操作系统管理所有的资源,也包括内存。如果我们需要向内存空间写入数据的话,要使用操作系统给我们分配的空间,而不应直接用地址任意指定内存单元,向里面写入。下一章我们会对“使用操作系统给我们分配的空间”有所认识。我们尽量直接对硬件编程,而不去理会操作系统。
我们似乎面临一种选择, 是在操作系统中安全、规矩地编程,还是自由、直接地用汇编语言去操作真实的硬件,了解那些早已被层层系统软件掩盖的真相?在大部分的情况下,我们选择后者,除非我们就是在学习操作系统本身的内容。
我们在纯DOS方式下,可以不理会DOS,直接用汇编语言去操作真实的硬件,因为运行在CPU实模式下的DOS,没有能力对硬件系统进行全面、严格地管理。但在Windows 2000. Unix 这些运行于CPU保护模式下的操作系统中,不理会操作系统,用汇编语言去操作真实的硬件,是根本不可能的。硬件已被这些操作系统利用CPU保护模式所提供的功能全面而严格地管理了。