004-MOV指令的寻址方式

l   立即寻址
l   寄存器寻址
l   寄存器间接寻址
l   直接寻址方式
l   直接寻址方式
l   寄存器相对寻址
 
一、了解指令常用寻址方式
  寻址方式就是寻找操作数或操作数地址的方式。
  寄存器 是中央处理器内的组成部分。 寄存器 是一组容量有限的高速存贮部件,它们可用来暂存指令、数据和位址。( 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  寄存器 相对寻址
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值