crack123 发表于 2005-2-15 23:26:07

汇编语言寻址

初学汇编的人往往搞不懂寻址方式,因此我参考《80X86汇编语言程序设计教程》
一书在加上个人的理解整理的如下内容供初学者参考。
                                                          by 东方
============================================================================
    表示指令中操作数所在的方法称为寻址方式。
============================================================================
    8086/8088有7种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接
寻址,寄存器相对寻址,基址加变址寻址方式,相对基址加变址寻址。

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

cdboydiy 发表于 2005-2-26 20:42:15

哎,你们真好,会汇编 ̄!

飘云 发表于 2005-2-26 20:44:33

cdboy?
DFCG的高手??

xbb[DFCG] 发表于 2005-4-14 21:22:14

支持一下。汇编是破解的基础啊。我终于认识到了。Crack与编程是不能分家的,分家了当你达到一定的水平后就无法继续深入了。

魔幻水晶 发表于 2007-11-21 23:35:15

顶顶,总结的很详细撒……

沙海绿洲 发表于 2007-12-10 23:05:00

支持一下。汇编是破解的基础啊。
页: [1]
查看完整版本: 汇编语言寻址