zoukankan      html  css  js  c++  java
  • 汇编语言-寻址方式

    转载自: http://www.feiesoft.com/asm/03-8.html

    一 定义

      在指令中,指定操作数或操作数存放位置的方法称为寻址方式

    二 分类(16位cpu)

      1 立即数寻址

      2 寄存器寻址

      3 存储器寻址

        (1) 直接寻址

          操作数存放在内存中,在指令中直接给出该操作数的有效地址

          例: mov ax, [100]

        (2) 寄存器间接寻址

          操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定

          

        (3) 寄存器相对寻址

          操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。

          若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;

          若有效地址用BP来指定,则其缺省的段寄存器为SS。

        (4)  基址变址寻址

          操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。

        (5) 相对基址变址寻址

          操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。

    三 32位cpu寻址方式

    在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

    在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

    当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

    32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
    32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

    用32位地址偏移量进行寻址的有效地址计算公式归纳如上所示。

    由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下:

    1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;

    如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

    2、默认段寄存器的选用取决于基址寄存器;

    3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

    4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

    下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

    指令的举例 访问内存单元所用的段寄存器
    MOV  AX, [123456H] ;默认段寄存器DS
    MOV  EAX, [EBX+EBP] ;默认段寄存器DS
    MOV  EBX, [EBP+EBX] ;默认段寄存器SS
    MOV  EBX, [EAX+100H] ;默认段寄存器DS
    MOV  EDX, ES:[EAX*4+200H] ;显式段寄存器ES
    MOV  [ESP+EDX*2], AX  ;默认段寄存器SS
    MOV  EBX, GS:[EAX+EDX*2+300H] ;显式段寄存器GS
    MOV  AX, [ESP]  ;默认段寄存器SS
  • 相关阅读:
    code of C/C++(2)
    code of C/C++ (1)
    dll 的编写和使用
    Python基础练习-数据类型与变量part2
    Python基础练习-数据类型与变量
    python基础练习-循环
    Linux grep
    nginx反向代理
    正则表达式
    Linux samba ing
  • 原文地址:https://www.cnblogs.com/talenth/p/7085199.html
Copyright © 2011-2022 走看看