FLASH游戏 | 站长工具 | 技术学院 忙鱼网 怕笑网 
积木网
菜鸟入门 | 病毒漏洞 | 黑客工具 | 入侵实例 | 黑客编程 | 旁门左道
推荐: PHP5中文在线手册 | Smarty中文手册(模板引擎) | css2样式表中文手册 | ASP开发手册 | JScript开发手册
积木网 >> 黑客技术 >> 黑客编程

汇编语言寻址

来源:互联摘选 日期:2008年08月19日 03:43:21
初学汇编的人往往搞不懂寻址方式,因此我参考《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项可以任意的去掉另外两项。
被阅读 0 次 本文现有评论 0
打印】 【收藏此页】 【关闭

强烈推荐

热门知识

最新文章

合作伙伴:网乐宽频 | 北京画廊
站长 服务邮箱:GimooHr(#)Gmail.Com 站长交流群:6412338 联系站长QQ号:36147437
Copyright © 2008 Gimoo.NetInc. all rights reserved 京ICP备05050695号