zoukankan      html  css  js  c++  java
  • ARM汇编伪指令

    伪指令的意义

    • 伪指令不是指令,伪指令和指令的根本区别是经过编译后会不会生成机器码。
    • 伪指令的意义在于指导编译过程。
    • 伪指令是和具体的编译器相关的,我们使用gnu工具链,因此学习gnu环境下的汇编伪指令。

    gnu汇编中的一些符号

    @ 用来做注释。可以在行首也可以在代码后面同一行直接跟,和C语言中//类似

    # 做注释,一般放在行首,表示这一行都是注释而不是代码。

    :以冒号结尾的是标号

    . 点号在gnu汇编中表示当前指令的地址

    # 立即数前面要加#或$,表示这是个立即数

    常用gnu伪指令

    .global _start       @ 给_start外部链接属性

    .section .text       @ 指定当前段为代码段

    .ascii .byte .short .long .word .quad .float .string @ 定义数据

    .align 4          @ 以16字节对齐

    .balignl 16 0xabcdefgh   @ 16字节对齐填充

    偶尔会用到的gnu伪指令

    .end         @标识文件结束

    .include       @ 头文件包含

    .arm / .code32    @声明以下为arm指令

    .thumb / .code16  @声明以下为thubm指令

    最重要的几个伪指令

    • ldr 大范围的地址加载指令
    • adr 小范围的地址加载指令
    • adrl 中等范围的地址加载指令
    • nop 空操作
    • ARM中有一个ldr指令,还有一个ldr伪指令 一般都使用ldr伪指令而不用ldr指令

    adr与ldr

    • adr编译时会被1条sub或add指令替代,而ldr编译时会被一条mov指令替代或者文字池方式处理;
    • adr总是以PC为基准来表示地址,因此指令本身和运行地址有关,可以用来检测程序当前的运行地址在哪里
    • ldr加载的地址和链接时给定的地址有关,由链接脚本决定。
  • 相关阅读:
    【原】Windows下常用命令
    【转】Samba配置文件详解
    JS笔记-选项卡的重用
    canvas.toDataURL()跨域问题
    Adobe Air 写文件如何换行
    AS3多线程快速入门(三):NAPE物理引擎+Starling[译]
    AS3多线程快速入门(二):图像处理[译]
    AS3多线程快速入门(一):Hello World[译]
    使用FileStream对象读写文件(转)
    Adobe Air写配置文件
  • 原文地址:https://www.cnblogs.com/jxjl/p/6977883.html
Copyright © 2011-2022 走看看