发新话题
打印

[原创]汇编语言之寻址方式整理

[原创]汇编语言之寻址方式整理

文章作者:东方[E.S.T]
信息来源:邪恶八进制

初学汇编的人往往搞不懂寻址方式,因此我参考《80X86汇编语言程序设计教程》
一书在加上个人的理解整理的如下内容供初学者参考。

   表示指令中操作数所在的方法称为寻址方式。

   8086/8088有7种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接
寻址,寄存器相对寻址,基址加变址寻址方式,相对基址加变址寻址。

1  立即数寻址
   操作数就在指令中,作为指令的一部分,跟在操作码后存放在代码段。
   eg.  mov  ah,01h
       mov  ax,1204h  
       ;如果立即数是16位的,则高地址放在高位,低地址放在低位
      
2  寄存器寻址
   操作数在寄存器中,指令中指定寄存器号。对于8位操作数,寄存器可以是AL,AH,BL,BH,
   CL,CH,DL,DH。 对于16位操作数,寄存器可以是AX,BX,CX,DX,BP,SP,SI,DI等
   eg.  mov  ah,ch
       mov  bx,ax
      
3  直接寻址方式
   操作数在存储器中,指令直接包含操作数的有效地址EA。
   eg.  mov ax,[1122h]   ;将ds:1122的数据放在ax,默认段为DS
       mov es:[1234],al  ;采用了段前缀
      
4  寄存器间接寻址
   操作数在存储器中,操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。在不采用段前
   缀的情况下, 对于DI,SI,BX默认段为DS,而BP为SS。
   eg.  mov ah,[bx]
       mov ah,cs:[bx]  ;使用了段前缀
      
5  寄存器相对寻址
   操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的
   内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示,8位要被带
   符号扩展为16位。
   eg.  mov ah,[bx+6]
       ;段址默认情况与寄存器间接寻址相同
      
6  基址加变址寻址
   操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)加上变址寄存器(SI,DI)的
   内容。如果有BP,则默认段址为SS,否则为DS.
   eg.  mov ah,[bx+si]
   
7  相对基址加变址寻址
   操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的
   内容加上8位或16位的位移之和。如果有BP,则默认段址为SS,否则为DS.
   eg.  mov ax,[bx+di-2]
       mov ax,1234h[bx][di]
      
   [注]:上面3~7为存储器寻址方式   


   80386支持8088/8086的各种寻址方式。在立即数和寄存器寻址中,操作数可以达32位宽。
在实模式下,80386和8088。8086没什么区别。在保护模式下,段的最大长度是4G。段寄存器内的
是段选择子,而不再是段基地址。
   80386具有灵活的存储器寻址方式,他类似于8088/8086的存储器寻址,不过386的基址寄存器
可以是8个通用寄存器,变址寄存器可以是除ESP外的另7个通用寄存器。寻址方式如下
       |无  |        |无  |
       |EAX|       |EAX|
       |EBX|       |EBX|     |1|
       |ECX|       |ECX|     |2|      |  无  |
       |EDX|    +  |EDX| *   |4|    +  |8 bit |  
       |ESP|                  |8|      |32 bit|
       |EBP|       |EBP|
       |ESI|        |ESI|
       |EDI|        |EDI|
      
   其中的1,2,4,8是比例因子,且上面的3项可以任意的去掉另外两项。
欢迎2008!

TOP

http://www.eviloctal.com/forum/read.php?tid=4684
前几章重要的基础都总结了 寻址也是
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

引用:
下面是引用东方于2005-01-27 18:53发表的:
日  那删了吧  !=_=
既然原创的 何必删除呢?堆着也是堆着
而且这样需要寻址资料的人很容易搜索到关键字:)
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题