积木首页 | 500多种网页特效 | 函数手册 | 广播电台 | 高清晰图片素材 | 服务器合租 | 万年历 | 网友最新浏览记录
程序开发 网页设计 搜索引擎 特效代码 操作系统 防范病毒 黑客技术 图形图象 电脑硬件 网络技术 服 务 器 数 据 库 网文精粹
您的位置:积木首页 >> 黑客技术频道 >> 黑客编程 >> 正文:
标题:汇编语言寻址
时间:2005-1-31 来源:不详 浏览数:
初学汇编的人往往搞不懂寻址方式,因此我参考《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项可以任意的去掉另外两项。

(责任编辑:欣欣裴)
关于本站 | 广告服务 | 联系我们 | 版权申明 | 强强联盟 | 投稿热线 | 网站地图 | 申请链接
Copyright ©2005-2006 Gimoo.net All rights reserved. 积木网 版权所有
E-mail:gimoohr@gmail.com 京ICP备05050695号