您的位置:首页 > 其它

004-MOV指令的寻址方式

2016-09-10 23:07 239 查看

立即寻址

寄存器寻址

寄存器间接寻址

直接寻址方式

直接寻址方式

寄存器相对寻址
 
一、了解指令常用寻址方式
 
寻址方式就是寻找操作数或操作数地址的方式。
 
寄存器是中央处理器内的组成部分。寄存器是一组容量有限的高速存贮部件,它们可用来暂存指令、数据和位址。(DWORD)
MOV      EAX,0x1234        //立即寻址                 
MOV      EAX,EBX          //寄存器寻址   
数据寄存器,一般称之为通用寄存器组
通用寄存器有4个 EAX,EBX,ECX,EDX             
MOV      EAX,[EBX]         //寄存器间接寻址                 
MOV      EAX,v             //v是一个变量名  
MOV      EAX,[1234]         //直接寻址方式                 
MOV      EAX,[EBX+1234]    //寄存器相对寻址     
 
二、理解寻址
 
上边的名字看起来很多,总结起来也就2种方式:
  
带[]与不带[]
   1、不带括号的
有立即数与寄存器
   2、带括号的就是指针,从地址里边取值出来。   
MOV      EAX,0x1234        //立即寻址         eax=0x1234;           
MOV      EAX,EBX          //寄存器寻址       eax=ebx              
MOV      EAX,[EBX]         //寄存器间接寻址   eax=*(int*)ebx;               
MOV      EAX,v             //v是一个变量名    eax=v; //被编译后
一般会呈后边两种形式
MOV      EAX,[1234]         //直接寻址方式     eax=*(int*)(0x1234)
MOV      EAX,[EBX+1234]    //
寄存器相对寻址  eax=*(int*)((int)ebx+1234); //这里的1234称为偏移,EBX是基址
 
三、对调位置
MOV      EAX,0x1234        //立即数不能出现在MOV指令左边。如:    
MOV 0x1234,EAX 这是错的写法    
后边的都可以对换位置      
MOV      EAX,EBX          //寄存器寻址       eax=ebx                  mov
ebx,eax         
MOV      EAX,[EBX]         //寄存器间接寻址   eax=*(int*)ebx;            mov
[ebx],eax      
MOV      EAX,v             //v是一个变量名    eax=v;                   
mov v,eax
MOV      EAX,[1234]         //直接寻址方式     eax=*(int*)(0x1234)        
mov [1234],eax
MOV      EAX,[EBX+1234]    //
寄存器相对寻址  eax=*(int*)((int)ebx+1234)  
mov [ebx+1234],eax
 
四、代码测试
int *da=a;//int
a[0x10]={0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xd,0xe};
//提示
在命令栏中用
dd 地址表达式
可以以DWORD  4字节格式显示指定地址的数据
        
__asm
         {
     
mov
eax,0x1111
          
mov
ebx,eax
          
mov
ebx,bbb //全局变量bbb
          
mov
ebx,da
//取数组基址
          
mov
eax,[da+4]
          
mov
eax,[ebx+4]
         }
 
//下边指令,前边是寄存器相对寻址,后边是立即寻址
0040105A  |.  C745 FC 20304>MOV DWORD PTR SS:[EBP-4],001_MOV.00403020     ;  int *da=a //a是数组的地址
00401061  |.  B8 11110000   MOV EAX,1111                                  ;  eax=0x1111 
立即寻址
00401066  |.  8BD8          MOV EBX,EAX                                   ;  mov ebx,0x1111-->ebx=0x1111 //寄存器寻址
00401068  |.  8B1D 18304000 MOV EBX,DWORD PTR DS:[403018]                 ;  mov ebx,008899FF-->ebx=009988FF
直接寻址
0040106E  |.  8B5D FC       MOV EBX,DWORD PTR SS:[EBP-4]                  ;  mov ebx,da
寄存器
相对寻址
00401071  |.  8B45 00       MOV EAX,DWORD PTR SS:[EBP]                        //寄存器间接寻址
00401074  |.  8B43 04       MOV EAX,DWORD PTR DS:[EBX+4]                  ;  eax=da[1]=1 
寄存器
相对寻址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: