一。ARM机器码
反汇编工具:arm-linux-objdump -D -S start.elf
查看手册ARM Architechture Reference Manual的指令集那一章The Arm Instruction Set
ARM机器码是一个32位的整数,8个段
1.condition段:条件,4位
2.保留位:2位,00
3.shift operand:是立即数还是寄存器
4.opcode:1101
5.S位:1位,0,是否影响CPSR寄存器
6.Rn:4位,0000
7.Rd:4位,0000,标明通用寄存器的编号
8.shift operand:
以MOV这个指令为例:
二。定义类伪指令
1.伪指令的定义
伪指令本身并没有对应的机器码。只在编译的时候起作用,或者转化为其他的实际指令来运行。
2.伪指令
.data
hello:
.ascii “hello world”
bh:
.byte 0x1
ADD:
.word 0xff
.text
.global _start
_start:
.equ:定义一个宏
.align:字节对齐
三。操作类伪指令
1.nop:空操作
2.ldr
可以是通用指令也可以是伪指令,通用指令立即数前面#,伪指令立即数前面=
ldr r0, =0x1ff
四。协处理器访问指令
1.什么是协处理器
减轻核的负担,执行特定处理任务
ARM支持16个协处理器,其中重要的是CP15
2.CP15的作用?
系统控制协处理器,提供额外寄存器,达到控制MMU,保护系统,时钟模式
3.如何访问CP15
通过16组寄存器
指令:mcr和 mrc
mcr:通用寄存器的值移动到协处理器里面
mrc:协处理器的值移动到通用寄存器里面