zoukankan      html  css  js  c++  java
  • [国嵌笔记][026][ARM伪指令]

    ARM机器码

    1.汇编程序通过汇编器变成机器码,然后才能在ARM处理器上运行

    2.ARM机器码是一个32位的数,被分成了多个段,每个段都有各自的含义

    3.格式:

    cond:表示条件(4位)

    I:表示源操作数是寄存器还是立即数

    opcode:表示指令类型(4位)

    S:表示是否影响cpsr寄存器

    Rn:第一个源寄存器,有的指令中没有使用(4位)

    Rd:目的寄存器(4位)

    shift_operand:位移标志(4位)和第二个源寄存器或立即数(8位),所以mov指令中源操作数不能超过255

    4.示例:

    mov r0, r1   机器码:e1a00001

    1110 00 0 1101 0 0000 0000 000000000001

    moveq r0, #0xff   机器码:03a000ff

    0000 00 1 1101 0 0000 0000 000011111111

     

    伪指令定义

    伪指令本身并没有对应的机器码,它只是在编译的时候起作用,或者转化为其他的实际指令来运行

     

    定义类伪指令

    1.global

    作用:把一个标号定义为全局的,使其能够被其他C语言程序调用

    示例:

    .global _start

     

    2.data

    作用:定义数据段,表明数据将被存到数据段中

    示例:

    .data

     

    3.byte word ascii

    作用:定义数据类型

    示例:

    _byte: .byte 0xff

    _word: .word 0xaabbccdd

    _string: .ascii “hello world!”

     

    4.equ

    作用:宏定义,相当于C语言中宏的替换

    示例:

    .equ DATA, 0xff

    mov r1, #DATA

     

    5.align

    作用:使数据地址按n字节对齐

    示例:

    .align 4

     

    操作类伪指令

    1.nop

    作用:空操作指令,通常用来做延时

    示例:

    nop

    @在执行时相当于

    mov r0, r0

     

    2.ldr

    作用:用来在寄存器中装入大于8位的立即数,相当于mov,但mov不能装入大于8位的立即数

    示例:

    ldr r1, =0x1ff   @在ldr伪指令中“=”表示立即数

    @在执行时相当于

    ldr r1, [pc, #-4]

    .word 0x000001ff

  • 相关阅读:
    String 总结
    android 调试源码
    Java 随机数总结
    Android中如何控制调节屏幕亮度
    Activity中通过Bundle传递自定义数据类型
    Android AsyncTask简单用法
    WCF 第五章 可信赖会话
    WCF 第五章 会话级别的实例
    WCF 第五章 行为 在WCF一个服务内部的事务操作
    WCF 第五章 导出并发布元数据(服务行为)
  • 原文地址:https://www.cnblogs.com/d442130165/p/4896869.html
Copyright © 2011-2022 走看看