当前位置:鱼C工作室 >汇编语言 > 查看文章

[BX]和loop指令06 – 零基础入门学习汇编语言28

第五章:[BX]和loop指令06

 

让编程改变世界

Change the world by program


 

一段安全的空间

 

在8086模式中,随意向一段内存空间写入内容是很危险的 ,因为这段空间中可能存放着重要的系统数据或代码。

比如下面的指令:

mov ax,1000h

mov ds,ax

mov al,0

mov ds:[0],al

我们以前在Debug中,为了讲解上的方便,写过类似的指令。

但这种做法是不合理的 ,因为之前我们并没有论证过 1000:0中是否存放着重要的系统数据或代码。

 

如果1000:0中存放着重要的系统数据或代码,“mov ds:[0],al” 将其改写,将引发错误。

比如

assume cs:code
 
code segment
	mov ax,0
	mov ds,ax	
	mov ds:[26h],ax
 
	mov ax,4c00h
	int 21h
 
code ends
 
end

可见,我们在不能确定一段内存空间中是否存放着重要的放据或代码的时候,不能随意向其中写入内容。

 

不要忘记,我们是在操作系统的环境中工作,操作系统管理所有的资源,也包括内存。

同样不能忘记,我们正在学习的是汇编语言,要通过它来获得底层的编程体验,理解计算机底层的基本工作机理。

 

所以我们尽量直接对硬件编程,而不去理会操作系统。

我们似乎面临一种选择,是在操作系统中安全、规矩地编程,还是自由、直接地用汇编语言去操作真实的硬件,了解那些早己被层层系统软件掩盖的真相?

在大部分的情况下,我们选择后者,除非我们就是在学习操作系统本身的内容。

 

注意:

我们在纯DOS方式(实模式)下,可以不理会DOS,直接用汇编语言去操作真实的硬件,因为运行在CPU实模式下的DOS,没有能力对硬件系统进行全面、严格地管理。

但在Windows XP2000、UNIX这些运行于CPU保护模式下的操作系统中,不理会操作系统,用汇编语言去操作真实的硬件,是根本不可能的。硬件已被这些操作系统利用CPU保护模式所提供的功能全面而严格地管理了。

 

在后面的课程中,我们需要直接向内存中写入内容,可我们又不希望发生图5.17中的那种情况。所以要找到一段安全的空间供我们使用。

在一般的PC机中,DOS方式下,DOS和其他合法的程序一般都不会使用0:200~0:2FF( 0:200h~0:2FFh)的256 个字节的空间。所以,我们使用这段空间是安全的。

不过为了谨慎起见,在进入DOS后,我们可以先用Debug 查看一下,如果0:200~0:2FF单元的内容都是0的话,则证明DOS 和其他合法的程序没有使用这里。

为什么DOS和其他合法的程序一般都不会使用0:200~0:2FF这段空间?我们将在以后的课程中讨论这个问题。

 

好了,我们总结一下:

(1)我们需要直接向一段内存中写入内容;

(2)这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误。

(3)DOS方式下,一般情况, 0:200~0:2FF 空间中没有系统或其他程序的数据或代码;

(4)以后,我们需要直接向一段内存中写入内容时,就使用0:200~0:2FF这段空间。

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.