收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 黑客技术 > 黑客编程 > 正文

汇编语言寻址

来源:互联摘选 日期:2008-08-19 03:43
初学汇编的人往往搞不懂寻址方式,因此我参考《80X86汇编语言程序设计教程》
一书在加上个人的理解整理的如下内容供初学者参考。
                                                          by 东方[EST]
============================================================================
    表示指令中操作数所在的方法称为寻址方式。
============================================================================
    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项可以任意的去掉另外两项。

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号