飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3376|回复: 5

汇编语言寻址

[复制链接]
  • TA的每日心情
    开心
    2015-7-21 08:38
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2005-2-15 23:26:07 | 显示全部楼层 |阅读模式
    初学汇编的人往往搞不懂寻址方式,因此我参考《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项可以任意的去掉另外两项
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-2-26 20:42:15 | 显示全部楼层
    哎,你们真好,会汇编 ̄!
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2005-2-26 20:44:33 | 显示全部楼层
    cdboy?
    DFCG的高手??
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2024-3-21 21:06
  • 签到天数: 1489 天

    [LV.10]以坛为家III

    发表于 2005-4-14 21:22:14 | 显示全部楼层
    支持一下。汇编是破解的基础啊。我终于认识到了。Crack与编程是不能分家的,分家了当你达到一定的水平后就无法继续深入了。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-21 23:35:15 | 显示全部楼层
    顶顶,总结的很详细撒……
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-1-12 22:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2007-12-10 23:05:00 | 显示全部楼层
    支持一下。汇编是破解的基础啊。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表