1-3-3 ARM伪指令以及协处理器访问指令

1.  ARM机器码

    用命令“arm-linux-objdump -D -Sstart.elf”可以查看start.elf的反汇编信息,例如其中的一行:30008000: e59f008c 翻译成汇编,就是ldr r0, [pc, #140],其中的e59f008c就是32bit的ARM机器码。关于ARM机器码的详细解释,可参看《ARM Architecture Reference Manual》以及《The ARM Instrction set encoding》进行分析。


2.  定义类伪指令

    而伪指令,就是没有对应的机器码,只能在编译的过程中起作用,在编译时转化为其他实际指令运行。

    用命令“arm-linux-readelf -a start.elf”可查看地址和段信息。

    2.1    .global    :定义一个全局标号

    2.2    .ascii       :定义一个字符串

    2.3    .byte        :定义一个字节的数据

    2.4    .word       :定义一个字的数据

    2.5    .data        :定义数据段

    2.6    .equ         :定义一个宏

    2.7    .align       :4字节对齐

例如:

.data

hello:

    .ascii "abcdefg"    ;利用反汇编可观察到

bh:                              ;word 0x64636261

    .byte 0x1                ;word 0x68676665

.align 4

add

    .word 0xff

.text

.global _start

_start:

    .equ DA, 0x89

mov r0, #DA


3.  操作类伪指令

  3.1  nop :空操作,实质是执行了一个mov r0, r0的操作

  3.2  ldr :如果要向r0填入大于8bit的立即数,可以ldr r0, =0x1ff,但mov r0, #0x1ff就不行,因为mov只能8bit立即数,多了就不行了。(重要)


4.  ARM协处理器访问指令(可参考《ARM920T》手册)

  4.1  协处理器——cp15:主要用于执行特定的处理任务,ARM最多支持16个协处理器,在ARM中,cp15用于协助处理器控制cache,clock,mmu等。

  4.2  协处理器访问指令:mcr,mrc

    例如:mrc p15,0,r0,c0,c0,0


总结:

内存访问:str ldr

cpsr访问: msr mrs

cp15访问:mcr mrc

你可能感兴趣的:(1-3-3 ARM伪指令以及协处理器访问指令)