欢迎来到学术参考网

关于汇编伪指令EVEN操作机理的问题分析

发布时间:2015-07-16 10:57

 汇编语言属于低级语言范畴,是一种面向机器的、功能很强的程序设计语言。它具有目标代码简短,占用内存少,执行速度快等优点。
  汇编语言指令是机器指令的一种符号表示,不同类型的CPU就有不同的机器指令系统,也就有不同的汇编语言。除了同系列、不同型号CPU之间的汇编语言程序有一定程度的可移植性之外,其他不同类型CPU之间的汇编语言程序是无法移植的。
  正因为汇编语言具有“与机器相关性”的特性,程序员使用汇编语言编写程序时,可以对机器内部的各种资源进行合理的安排,编写出高效且需要对机器硬件精确控制的程序。所以掌握计算机系统的硬件结构对学习汇编语言具有很大帮助。
  在学习《汇编语言程序设计》课程时,有一条对准伪指令EVEN,其作用就是将下一个字节的地址设置为偶数,并且指出一个字的地址最好从偶地址开始。但其原因却并没有过多给以说明。因此,学生对它的功能比较茫然,为了充分说明该伪指令的功能,该文从8086微机系统的存储器组织结构着手,详细阐述这个问题。
  1 存储器中的数据组织
  在计算机系统中,作为一个整体存入或取出内存储器的数据称为“存储字”。例如:8位计算机的存储字是8位字长(1个字节);16位计算机的存储字是16位字长(2个字节)……
  对于内存储器的字长(一个存储单元所包含二进制代码的个数),如果和主机的字长相同,则一个存储单元存放一个存储字,存储字的地址就是存储单元的地址,这种存储器称为“字编址结构”。但在微机系统中,内存储器一般都是以字节作为基本存储单元。这样,对16位字长以及16位以上字长的计算机,一个存储字将被存放在几个连续的存储单元中,这种存储器称为“字节编址结构”。
  2 8086微机系统的存储器组织结构
  8086 CPU有16条数据线,20条地址线,可直接寻址1M字节的内存储器地址空间,而这1M字节的存储器地址空间是按字节顺序排列的。由于8086是16位的微型计算机,而在16微机系统中,CPU除了可以对一个字节(8位)操作外,还可以进行一个字(16位)的操作。为了能满足一次访问一个整字又能访问一个字节的要求,在8086微机系统中,1M字节的存储器地址空间实际分成两个512K字节的存储体——“偶存储体”和“奇存储体”。两个存储体之间采用字节交叉编址方式。
  对于任何一个存储体,只需要19条地址线(A19—A1)就可以直接寻址,剩下1条地址线(A0)用来区分当前访问的是哪一个存储体,A0=0时,表示访问的是偶存储体;A0=1时,表示访问的是奇存储体。
  在8086微机系统中,读写一个字节的信息时,可以直接采用上述方法进行操作,但读写一个整字的信息时,则需要同时访问两个存储体,在这种情况下,若只用A0的取值来控制读写操作显然就不行了。为此,在8086微机系统中,又增加一个总线高位有效控制信号。当有效时(低电平有效),选定奇存储体,体内地址由A19—A1确定;当A0=0时,选定偶存储体,体内地址同样由A19—A1确定。奇存储体和数据总线高8位(D15—D8)连接,偶存储体和数据总线低8位(D7—D0)连接。有时候,奇存储体称为高字节存储体,偶存储体称为低字节存储体。因此,在8086微机系统中,允许CPU访问任何一个存储体,读写一个字节的信息或同时访问两个存储体读写一个整字的信息。
  3 8086微机系统的存储器读/写操作
  8086CPU访问存储器时,在一个总线周期内,既可以访问一个字节,也可以访问一个整字。
  (1)字节访问。
  当8086CPU访问一个字节信息时,可以分为两种情况:
  ①如果访问的字节是偶地址,则数据总线低8位(D7—D0)和偶存储体之间直接进行数据传送。
  ②如果访问的字节是奇地址,则数据总线高8位(D15—D8)和奇存储体之间直接进行数据传送。
  由上可以看出,无论哪种情况,在一个总线周期内,都可以完成访问一个字节的操作。
  (2)整字访问。
  从上表可见,8086CPU能同时访问奇存储体和偶存储体中的一个字节,以组成一个16位存储字。此时,也有两种情况:
  ①如果要访问的一个字的低8位字节存放在偶存储体中,高8位字节存放在奇存储体中,以这种方式存放的一个字称为规则字。从上面分析可知,这时不需要字节交换地址交叉,直接就可以进行数据传送。因而,只需经过一个总线周期就可完成对一个规则字的访问。
  ②如果要访问的一个字的高8位字节存放在偶存储体中,低8位字节存放在奇存储体中,以这种方式存放的一个字称为非规则字。从上面分析可知,这时需要字节交换,才可以进行数据传送。因而,需要经过两个总线周期才可完成对一个非规则字的访问。
  对于以非规则字方式存放的一个字的操作过程是这样的(以写操作为例):在第一个总线周期内,送出奇地址(A0=1),同时发出=0信号,然后由8086 CPU把该字的低8位传送到数据总线的高8位(注意:此时发生了字节交换),写入存储器的奇存储体;然后,在第二个总线周期内,8086 CPU又发出一个由该奇地址加1的偶地址,此时A0=0,=1,8086 CPU把该字的高8位传送到数据总线的低8位(注意:此时又发生了字节交换),写入存储器的偶存储体。这样,经过二次存储器访问,才能把一个非规则字写入存储器的奇地址字单元。
  4 结语
  通过上面的分析,我们说可以得到如下的结论,在8086微机系统中,对于按字的读写操作(比如字数组),应尽可能地使要操作的数据,以规则字的方式存放在存储器中,这样,可以在一个总线周期内,完成一个字的读写操作,否则的话就需要用二个总线周期,从而使指令的执行时间延长。因此,在编写汇编语言源程序时,涉及到操作多字的时候,往往在存放多字的前面,插入一条伪指令EVEN,目的就是使字的地址从偶地址开始,既使该字成为规则字。
  对于16位微机系统中,一个字存入存储器要占有相继的两个字节,存放时,低位字节存入低地址,高位字节存入高地址,这样两个字节单元就构成了一个字单元,字单元的地址采用它的低地址来表示。
  例如:1:MOV AX,
  2;MOV AX,
  从上面的分析可知,第一条指令中的操作数是以规则字的 形式存放的,用一个总线周期的时间,就可以把操作数从存储器中取出。第二条指令中的操作数是以非规则字的形式存放的,要用二个总线周期的时间,才可以把操作数从存储器中取出。因此,执行第一条指令所需的时间要比执行第二条指令所需的时间少。
  32位微机系统中存储器接口是16位的扩展,数据总线有32位,故有4个存储体,每个存储体占1GB存储空间,存储体选择线通过字节允许线BE#0—BE#3实现,每个存储体要有独立的写通信号。操作机理与8086微机系统基本一致。
  参考文献
   沈美明.80X86汇编语言程序设计. 北京:清华大学出版社,2000.
   周明德.微型计算机系统原理及应用.北京:清华大学出版社,2005.

上一篇:三维物体主菲涅尔波带全息成像法的方式

下一篇:基于手机的端的交通调查及数据管理和策略