汇编--寻址方式

1、立即寻址方式   :操作数直接放在指令中

  mov AL,5     (AL)=05H
  mov AX,3064H   (AX)=3064H
  mov EAX,123456H  (EAX)=123456H

2、寄存器寻址方式 :操作数在寄存器中

  mov AX,BX   (AX)=3064H  (BX)=1234H    (AX)=1234H
  MOV EXC,EDX

3、直接寻址方式  :操作数的有效地址(偏移地址)只包括位移量一种成份

  mov AX,[2000H]
mov AX,2000H

4、寄存器间接寻址方式 :操作数的有效地址只包含基址寄存器的内容 

  mov AX,[BX]   默认DS:[BX]   ;也可以制定其他段跨越前缀来取得其他段中的数据
  mov AX,ES:[BX]

5、寄存器相对寻址方式(直接变址寻址方式)  操作数的有效地址为基质+偏移量或变指+偏移量

  mov AX,COUNT[SI]     mov AX,[COUNT+SI]

6、基址变址寻址方式

  mov AX,[BX][DI]  MOV AX,[BX+DI]      mov AX,[BX][BP] 是错误的。

7、相对基址变址寻址方式

  mov AX,MASK[BX][SI]
  mov AX,MASK[BX+SI]
  MOV AX,[MASK+BX+SI]

8、比例变址寻址方式

  MOV EAX,COUNT[ESI*4]

9、基址比例变址寻址方式

  mov ECX,[EAX][EDX*8]

10、相对基址比例变址寻址方式

  mov EAX,TABLE[EBP][EDI*4]  

 

 JMP

1、段内直接寻址

2、段内间接寻址

jmp  BX     ;(IP)=BX
jmp TABLE[BX]   ;(ip) = 16d*(ds) + (BX) +位移量

WORD PTR为操作符。指定地址是字

3、段间直接寻址

4、段间间接寻址

段内,段间区别是,段内修改(IP)的值,段间修改(CS:IP)的值

 

BP 是寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在 寻找堆栈里的数据使用个别的寻址方式时候才能用到
比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过B P来寻找堆栈里数据或者地址

 

 

SI源变址寄存器,DI目地变址寄存器,既然是变址寄存器,那么他们肯定是在某个地址的基础上进行偏移变化,由此我们就得出了需要基址寄存器。

 

[SI]是寄存器间接寻址,它是指SI中地址的内容如
mov si,2000
mov ax,[si]    //将2000地址中的内容赋给ax而SI,寄存器寻址方式
SI 就是指SI本身的内容
mov si,2000
mov ax,si     //将SI中的内容2000赋给ax

 

 

 

 

 

 

 

 

 

 

 

 

  

 

你可能感兴趣的:(汇编--寻址方式)