正文

8086/88通用寄存器2005-09-21 16:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wukong/5077.html

分享到:

8086/88内部有14个寄存器。其中有四个寄存器最常用。这四个寄存器称为通用寄存器。名字分别是AX、BX、CX和DX。它们具有一个通用的功能--保存数据,但每个寄存器还有自己专门的用途,下面分别介绍。

AX  A取自单词Accumulator,所以AX也被称为"累加器"。不过请不要望文生意,它的专门用途可不是作加法。今天我们介绍它的一个专门用途,就是CPU与端口交换数据的唯一通路。除此之外,它还有一系列专门的用途,这些用途以后会陆续谈到。

BX也被称为"基地址寄存器"(Base address)。这也是一个十分重要的寄存器,它可用来作为指针使用。这方面的内容将在第三章介绍。本节的程序不涉及BX的专门用途。

CX也称"计数器"(Counter)。这个寄存器主要用于为循环指令(LOOP)计循环次数,也用于计数据移位的位数。在"串处理"指令中也有应用。后面的程序就是用CX为LOOP指令计数的。

DS称为数据段地址寄存器(Data segment),它保存数据段的段地址。如果在程序中有数据的存取操作时,若不"显式"地指定段寄存器,则将在DS指定的段寻找相应的存储单元。

ES称为附加段地址寄存器(Exterial segment),也可以称为扩展段地址寄存器,它用于指向内存中的任一段。一般情况下我们常使用这个段寄存器取得内存中某个单元的数据而不需修改DS寄存器。

CS是代码段地址寄存器(Code segment),它和IP(指令指针)寄存器一起指向目前正在执行的指令。也就是说,CPU永远在CS:IP指向的内存单元中取得指令机器码并执行。CS寄存器的数值有变化,CPU所取的指令就有变化。

SS是堆栈段地址寄存器(Stack segment),它保存了堆栈存储区的段地址。堆栈是开辟在内存中的一段特殊空间,数据在堆栈中存取不同于在其它内存空间。

以上所讲的所有段寄存器都是16位的,无法拆分成8位使用,同时,段寄存器不能参与任何数学运算和逻辑操作。

指令指针寄存器(Instruction Pointer)
  IP是CPU内部一个16位的寄存器,它用于记录CPU将要执行的指令的偏移地址。指令的段地址由CS保存。IP不同于其它寄存器,它不能随意的修改,不能参与任何运算或逻辑操作。它的唯一用途就是为CPU取得指令提供偏移地址(CS提供段地址)。也就是说,CPU永远从CS:IP指定的内存地址处取得所要执行的指令。
  如果CS:IP指向的位置没有合乎逻辑的指令,而是一些杂乱无章的数据,那么CPU就会傻乎乎地把这些乱七八糟的数据当成指令来胡乱执行,其结果将是未知的。通常情况下会导致"死机"。
  在进入DEBUG环境后IP究竟指向什么位置?屏幕上显示IP指向偏移100H的位置。也就是说,我们后面要编制的程序也必须从偏移100H处开始。为什么要空出前面256字节内存呢?这是因为在这256字节的内存中保存有DOS系统提供的重要数据。关于这些数据的说明会在后面陆续介绍。
  (6)变址、基指针、堆栈指针和标志寄存器(Index,Base Pointer,Stack Point & Flag)
  这部分内容现在暂时不用,后面用到时会详细加以说明。
  一个看似简单的R命令引出了这么多枯燥的东西,实在让人头痛。不过这可是些极其重要的基本知识,不了解这些细节内容就无法继续学习下去。
  实际上与学习高级语言相比,这些知识更应使人感到新奇有趣。毕竟,我们只能看到高级语言执行的结果,而看不到它执行的过程。

阅读(4654) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册