zoukankan      html  css  js  c++  java
  • 3.3-常用汇编指令

    如何阅读反汇编文件? 以下是一个例子

    4bc: e3a0244e   mov r2, #1308622848

    4c0: e3a0344e   mov r3, #1308622848

    4c4: e5933000   ldr r3, [r3]

    像4bc这些是代码运行的地址, e3a0244e是机器码

    那常用的汇编指令有哪些?

    b, bl

    这两条指令为跳转指令,不同之处在于bl指令除了跳转之外,还将返回地址保存在lr寄存器中。

    mov

    这个指令可以把一个寄存器的值赋给另一个寄存器,或者把一个常熟赋给寄存器。常数必须能用立即数来表示

    当不能用立即数来表示时可以使用ldr命令来赋值。ldr是伪指令,它不是真实存在的指令,编译器会把它扩展成真正的命令。

    ldr r1, =label

    当它的第二个参数前有=号时,表示伪指令,否则表示内存访问指令

    ldr r1, [r2, #4] 将地址r2+4的内存单元数据读取到r1中

    ldr r1, [r2] 将地址为r2的内存单元的数据读取到r1中

    ldr r1, [r2], #4 将地址为r2的内存单元数据读取到r1中,然后r2 = r2+4

    str r1, [r2, #4] 将r1的数据保存到地址为r2+4的内存单元中

    str r1, [r2] 将r1的数据保存到地址为r2的内存单元中

    str r1, [r2], #4 将r1的数据保存在地址为r2的内存单元中,然后r2=r2+4

    add、sub

    add r1, r2, #1  r1=r2+1

    sub r1, r2, #1 r1=r2-1

    msr mrs

    msr cpsr, r0 复制r0到cpsr中

    mrs r0, cpsr 复制cpsr到r0

    arm有r0-r15 16个寄存器

    r15 表示程序计数器,也就是pc

    r14表示lr,连接寄存器

    r13表示sp,数据栈指针

    一般来说,当参数不超过4个时,使用r0-r3这4个寄存器来传递参数;如果参数个数超过4个,剩余的参数通过数据栈来传递

    对于一般的返回结果用a0-a3来传递

  • 相关阅读:
    centos磁盘满了,查找大文件并清理
    centos如何查看磁盘剩余空间
    无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确
    HTTP/1.1新建会话失败 解决方法及分析
    PHP 获取 IE浏览器版本号
    基于Android Studio搭建Android应用开发环境
    打印机重启后才能打印
    洛谷P1141 01迷宫【DFS】
    洛谷P1219 八皇后【DFS】
    UVA133
  • 原文地址:https://www.cnblogs.com/cheyihaosky/p/11562810.html
Copyright © 2011-2022 走看看