zoukankan      html  css  js  c++  java
  • arm指令系统

    arm常用指令主要包括以下六类:

    1、数据处理指令:完成寄存器中数据的算术和逻辑运算操作

    2、程序状态寄存器处理指令:MRS MSR

    3、跳转指令:B和BL

    4、load/store指令:用于寄存器和存储器之间数据传送的指令

    5、异常中断指令:SWI和BKPT

    6、协处理器指令:MRC MCR

    =-------------------------------------------------------------------

    二、汇编指令的格式


    arm指令编码格式:

    如:ADDEQS R0,R1,R2  :加上S,cpsr寄存器中的标志位能被置位

    --------------------------------------------------------------------------

    寻址方式:共有9种

    立即数寻址

    SUBS R0,R0,#1  @R0=R0-1

    ADD R0,#1,R0:这种方式是错误的,立即数只能作为第二操作数

    立即数的合法性判断:合法性即:如果某个数据是非法的,是不能作为立即数的

    此外还有一个简单的规则:

    1、立即数处于0x0---0xff之间

    2、如果立即数大于0xff,立即数循环左移偶数位,得到一个在0x0--0xff之间的一个数

    满足以上两个条件即合法:

    非法数举例:0x101 0xffffff

    非法数可通过这样来操作举例:LDR R1,=0xfffff

    ,寄存器寻址

    MOV R1,R2

    ,寄存器间接寻址

    LDR R1,[R2] ;将R2指向的存储单元的数据读出保存在R1中

    STR R1,[R2];将R1中的数据读出来保存在R2指向的存储单元中

    SWP R1,R1,[R2];  可分解为:[R2]<--R1 ,R1<--[R2]

    ,寄存器偏移寻址

    MOV R0,R2,LSL #3

    ,基址变址寻址

    LDR R1,[R3,#0X0C] ;读取R3+0xc地址上的存储单元的内容放到R1中

    LDR R1,[R0],#4;可分解为 R1<--[R0];R0=R0+4

    LDR R1,[R0,#-4]!;可分解为 R1<--[R0-4], R0=R0-4  R0中数据会自动更新

    ,多寄存器寻址

    LDMIA R1!,{ R2-R7,R12};将R1指向的单元中的数据读出到R2-R7,R12中,R1自动+1

    STMIA R0!,{ R2-R7,R12};

    ,堆栈寻址

    几个重要概念:

    嵌入式:使用的是满栈减栈 m:多个寄存器操作,F:FULL d:decrease

    STMFD sp!,{r4-r7,lr};将R4-R7,LR寄存器的值压栈,同时sp的值自动更新,先入编号大的寄存器

    LAMFD sp!,{r4-r7,lr};将栈中的内容放到r4-r7,lr中,SP自动更新,先出的数据给小的寄存器;

    ,块拷贝寻址

    ,相对寻址;

    BL SUBR1;调用SUBR1子程序

    。。。

    SUBR1 ..

    MOV PC,R14

    ---------------------------------------------------------------------------

    指令按功能分类:

    跳转指令:B,BX,BL,BLX只能跳转+/-32Mb

    超过这个范围可通过LDR PC,=LABEL来跳转;

    --------------------------------------------

    寄存器与存储器交换指令(状态寄存器独有的)

    MRS R0,CPSR

    BIC R0,R0,#(1<<7)

    MSR CPSR,R0

    这样一来只修改了第七位

    ---------------------------------

    逻辑运算指令:AND ,ORR,EOR,BIC 

    BIC R1,R2,R3 ;将R3的反码和R2逻辑与,结果存放到R1中;

    ----------------------------------------------

    协处理器指令:

    arm微处理器可支持多达16个协处理器,每个协处理器里有多个寄存器;

    MRC P15,0,Rd,C0,C0,0;读取协处理器C0中编号为0的寄存器到Rd中。

    MCR ...

    *MCR CPSR_c,r0

    --------------------------------------------------------------

    arm汇编伪指令(并不是真正的arm指令,在编译的时候,编译器会讲伪指令变成真的arm指令)

    start

    ADRL

    LDR R1,=0X33(伪指令)

    LDR R1,[R2](ARM指令)

  • 相关阅读:
    metasploit 常用命令汇总
    MSF命令 收集
    【转载】虫师『性能测试』文章大汇总
    渗透测试、取证、安全和黑客的热门链接
    Hackers top in China
    国外整理的一套在线渗透测试资源合集[转载]
    Filezilla中文字符文件看不到或显示乱码的解决办法
    Filezilla 多目录的访问设置
    ISAPI在IIS7上的配置
    数据库主体在该数据库中拥有 架构,无法删除解决方法(转)
  • 原文地址:https://www.cnblogs.com/defen/p/5380149.html
Copyright © 2011-2022 走看看