就业数据资源平台
当前位置:首页 > PC技术
三级PC技术寻址方式的复习

根据教育部考试中心颁布的全国计算机等级考试大纲,三级PC技术考试的基本要求有:熟悉80X86微处理器的结构、原理及其宏汇编语言程序设计。上机考试操作语言为:汇编语言。笔试考试内容之一——微处理器与汇编语言程序设计部分的重点是:80X86系列微处理器指令系统,指令格式与编码,寻址方式,指令系统。  
  从上可知汇编语言在三级PC技术考试中的重要性。熟悉并灵活地应用机器所采用的各种寻址方式,对汇编语言程序设计是至关重要的。指令系统常常要用到寻址方式,主要是要弄懂具体各条指令的源操作数和目的操作数放在什么地方,也就是操作数的寻址方式。在具体应用编程时,如果弄不懂寻址方式就无法下手。可以说寻址方式是学习汇编这门低级语言的入场券,但寻址方式往往也是学习过程中的瓶颈问题。  
  下面和大家谈谈如何掌握80X86系列微处理器(以Intel8086/8088为例)的寻址方式。  
  在学习Intel8086/8088微处理器中寻址方式时,涉及的寻址概念有七个:寄存器寻址、立即寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址。其中寄存器寻址、立即寻址、直接寻址相对来说好理解,而寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址这四种寻址方式之间有许多密切联系之处,极其容易混淆。如何找出它们之间的区别和联系,从而形成正确的概念呢?  
  我们知道,分析、比较与综合是思维的基本过程,也是重要的逻辑思维方法。根据汇编抽象的特点,在进行概念学习时,借助比较的方法提高我们的辨析能力,最后综合应用所学到的概念来编程解决实际问题。  
  下面应用比较分析法来谈谈这七种寻址方式的学习,并结合三级PC技术的考题以帮助大家理解。  
  一、寄存器寻址  
  指令所指明的寄存器就是操作数的存放地址。  
  汇编格式:R (R是寄存器名)  
  功能:寄存器R的内容是操作数。  
  寄存器寻址的寻址方式如右图所示: <br>   
  对寄存器寻址方式,我们要牢牢掌握操作数存放在指令规定的寄存器中,不需访问内存,工作效率高。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP;而对8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH或DL。  
  例1. MOV AX, BX  
  执行过程如下图所示: <br>   
  分析:源操作数BX和目的操作数AX都是寄存器寻址。  
  执行前:(AX)=8A9DH (BX)=1234H  
  执 行:(BX)→AX  
  执行后:(AX)=1234H (BX)=1234H  
  由于寄存器是CPU的一部分,因此采用寄存器寻址方式可以提高工作效率。特别是累加器AX,若用它存放运算结果,则指令的执行时间要短些。对于那些需要经常存取的操作数,采用寄存器寻址方式较为合适。  
二、立即寻址  
  在立即寻址方式中,立即操作数可以是8位或16位,并且是指令的一部分。立即数据总是紧跟在指令操作码之后并和操作码一起存放在代码段中,因而立即数据总是和操作码一起被放入BIU中的指令队列里,在指令执行时不需再存取存储器。  
  汇编格式:n (n为立即操作数)  
  功能:指令下一单元的内容为操作数n。  
  立即寻址的寻址方式如图所示: <br>   
  对立即寻址方式,我们可和寄存器寻址比较学习。首先这两种寻址方式都不需要访问内存,这是它们之间的共同点,其次,立即寻址的操作数就在代码段里的操作码之后,是指令的一部分,而寄存器寻址的操作数则放在指令规定的寄存器中。  
  例:2003年4月考题
 根据下面定义的数据段:  
  DSEG SEGMENT  
  DAT1 DB ‘1234‘  
  DAT2 DW 5678H  
  ADDR EQU DAT2-DAT1  
  DSEG ENDS  
  执行MOV AX,ADDR指令后,AX寄存器中的内容是:  
  (A)5678H (B)7856H  
  (C)4444H (D)0004H  
  答案:D  
  内存分配示意图: <br>   
  分析:首先根据题目定义的数据段画出内存分配示意图,画图时要注意字符在内存中是以ASCII码的形式存放,同时标出每个存储单元的偏移地址(EA),在相应的存储单元标出变量名。从内存分配示意图,我们可知DAT1和DAT2的EA分别为0和4,因此表达式DAT2-DAT1的值为4。指令EQU是符号定义伪指令,则ADDR为一个符号常量,代表4。MOV AX,ADDR指令中的源操作数ADDR是立即寻址,执行后就是把4的传给AX。所以答案选D。  
  立即寻址方式主要用来给寄存器或存储器赋初值,也可以与寄存器操作数或存储器操作数进行算术逻辑运算。采用立即寻址方式不仅能简化数据的存取,而且可使指令的书写直观、清晰。在程序设计中,立即寻址方式使用得相当多。  
三、直接寻址  
  在直接寻址方式中,操作数的偏移地址(EA)是指令的一部分,它与操作码一起存放在代码段中,而操作数可以存放在数据段,也可以存放在其他段。操作数的物理地址(PA)由其所在段的段寄存器内容左移4位与指令中给出的偏移地址(EA)相加形成。  
  汇编格式:含有变量的地址表达式或段寄存器名:[EA]  
  功能:指令下一字单元的内容是操作数的偏移地址EA。  
  PA=(段寄存器)×10H+EA  
  直接寻址的寻址方式如图所示: <br>   
  这种寻址方式和前两种的最大的区别就是:指令执行时需要再存取存储器,也就是存取操作数时需要访问内存,而前两种寻址方式存取操作数时不需要访问内存。  
  例:2003.4三级PC考题  
  若有BUF DW 1、2、3、4,则可将数据02H取到AL寄存器中的指令是  
  (A)MOV AL, BYTE PTR[BUF+1]  
  (B)MOV AL, BYTE PTR[BUF+2]  
  (C)MOV AL, BYTE PTR [BUF+3]  
  (D)MOV AL,BUF[2]  
  答案:B  
  分配示意图: <br>   
  分析:根据数据定义伪指令BUF DW 1、2、3、4画出内存分配示意图,在存储单元相应位置标出变量名和EA。答案D中目的操作数AL的类型为字节,而源操作数BUF[2]前无BYTEPTR,则BUF[2]类型为字,两个操作数的类型不一致,指令是错误的,因此答案D可排除。变量BUF的EA为0,数据02H在内存中的EA为2。答案ABC中指令的源操作数都是直接寻址,而只有[BUF+2]的EA为2,所以选B。  
到目前为止,我们已经复习了寄存器寻址、立即寻址、直接寻址这三种寻址方式。前面三种寻址方式相对来说容易理解和掌握,而后四种寻址方式的操作数都存放在内存储器中,而且其汇编格式有相似之处,容易混淆。学习中我们要紧紧抓住这
四种寻址方式中操作数都存放在内存储器中这一特点,而要访问内存储器存放操作数的存储单元,则需要知道存放操作数的存储单元在内存储器中的偏移地址(EA)。寻址方式的重要区别就是得到EA的方式不同。只要掌握如何计算通过这四种寻址方式得到的内存操作数的偏移地址,问题就迎刃而解了。  
  4.寄存器间接寻址  
  寄存器间接寻址得到的操作数存放在内存储器中,而操作数的偏移地址EA在指令指明的寄存器中,即寄存器的内容为操作数的偏移地址EA。  
  汇编格式:[R] R(Register 寄存器的简写,只能是SI,DI,BX,BP其中之一) <br>   
功能:R的内容为操作数的偏移地址EA。即操作数的有效地EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中:  
  EA= [R] 用R作间接寻址寄存器时。  
  寄存器间接寻址的寻址方式如图所示:  
  若用寄存器SI,DI,BX间接寻址,则操作数在当前数据段中。  
  PA=(DS)×10H+EA  
  若用寄存器BP间接寻址,则操作数在当前堆栈段中。  
  PA=(SS)×10H+EA  
  寄存器间接寻址和寄存器寻址在汇编格式上相比较多了个中括号,也就是因为这样,他们的寻址方式截然不同,寄存器寻址不需访问内存,操作数就在指令指定的寄存器中,而寄存器间接寻址需要访问内存,操作数的偏移地址EA就是寄存器的内容。  
  例:2002.8三级PC考题  
  根据下面的指令和伪指令序列,AX寄存器的内容是多少?  
  TAB DW 1, 2, 3, 4, 5, 6  
  ENTRY EQU 3  
  MOV BX, OFFSET TAB  
  ADD BX, ENTRY  
  MOV AX, WORD PTR [BX]  
  (A)0300H(B)0003H(C)0506H(D)0403H  
  答案:A  
  内存分配示意图: <br>   
  分析:根据数据定义伪指令BUF DW 1、2、3、4画出内存分配示意图,在存储单元相应位置标出变量名和EA。OFFSET TAB得到的是变量TAB的EA。TAB这个变量的EA为0则MOV BX,OFFSET TAB这个指令的源操作数OFFSET TAB是立即寻址,(BX)=0。ENTRY为符号常量,指令ADD BX,ENTRY的源操作数ENTRY也是立即寻址(BX)+3→BX,(BX)=3。MOV AX,WORD PTR [BX]指令中源操作数[BX]是寄存器间接寻址,前面的WORD PTR指明内存操作数为字类型。指令执行后把偏移地址为3的字单元的内容传给AX。所以答案选A。  
5.寄存器相对寻址  
  在寄存器相对寻址方式中,操作数在内存储器中,而操作数的偏移地址EA是指令指明的寄存器的内容与指令中给出的位移量相加之和。  
  汇编格式:XR (或R+X,X + R)  
  功能: R的内容与X相加之和为操作数的偏移地址EA。  
  R(Register 寄存器的简写,只能是SI,DI,BX,BP其中之一。)  
  X表示位移量,其值是用8位或16位二进制补码表示的有符号数。
就业数据资源平台