zoukankan      html  css  js  c++  java
  • 指令常用寻址方式

    知识点:
    立即寻址
    寄存器寻址
    寄存器间接寻址
    直接寻址方式
    直接寻址方式
    寄存器相对寻址
    
    一、了解指令常用寻址方式
      寻址方式就是寻找操作数或操作数地址的方式。
      寄存器是中央处理器内的组成部分。寄存器是一组容量有限的高速存贮部件,它们可用来暂存指令、数据和位址。(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
    //下边指令,前边是寄存器相对寻址,后边是立即寻址
    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  寄存器 相对寻址
    
  • 相关阅读:
    C# Winform 使用Quartz
    C# datagridview显示行号
    C#时间格式问题解决,不受系统时间格式影响
    PLSQL永久激活
    C#内存回收
    Modbus的通信参数存在flash中,如果改乱了,该怎么办--FreeModbus从站设计(12)
    如何把Modbus的通信参数存在单片机的flash中--FreeModbus从站设计(11)
    为什么有的PLC需要上电停止功能,能防止PLC变砖(可编程控制器 串口通信)
    让串口和Modbus初始化的参数同步起来-STM32F103、FreeModbus从站设计(6)
    STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil工程
  • 原文地址:https://www.cnblogs.com/whzym111/p/6362899.html
Copyright © 2011-2022 走看看