1.指令与伪指令的概念:linux
(1)(汇编)指令是CPU机器指令的助记符,通过编译后会获得一串10组成的机器 码,能够由CPU读取执行。架构
(2)(汇编)伪指令本质上不是指令(只是和指令一块儿写在代码中),它是编译器环 境提供的,目的是用来指导编译过程,通过编译后伪指令最终不会生成机器码。less
1.1ARM指令的不一样风格指针
两种不一样风格的ARM指令内存
(1)ARM官方的ARM汇编风格:指令通常用大写、Windows中IDE开发环境(如 ADS.MDK等)经常使用。如: LDR R0, [R1]开发
(2)GNU风格的ARM汇编:指令通常用小写字母、linux中经常使用。如:ldr r0, [r1]编译器
2.ARM汇编特色编译
2.1:LDR/STR架构原理
ARM采用RISC架构,CPU自己不能直接读取内存,而须要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。im
(1)ldr(load register)指令将内存内容加载入通用寄存器。
(2)str(store register)指令将寄存器内容存入内存空间中。
(3)ldr/str组合用来实现 ARM CPU和内存数据交换
2.2:8种寻址方式
-------------------------------------------------------------------------------
(1)寄存器寻址 mov r1, r2
(2)当即寻址 mov r0, #0xFF00
(3)寄存器移位寻址 mov r0, r1, lsl #3(左移)
---------------------------------------------------------------------------------
(4)寄存器间接寻址 ldr r1, [r2](r2寄存器存放内存的地址所 对应的值)
(5)基址变址寻址 ldr r1, [r2, #4](r2寄存器存放内存的地 址+4)
(6)多寄存器寻址 ldmia r1!, {r2-r7, r12}(r1寄存器存放的 内存地址做为首地 址依次存放到后面 寄存器)
(7)堆栈寻址 stmfd sp!, {r2-r7, lr}(sp堆栈指针连续访 问放到寄存器)
-----------------------------------------------------------------------
(8)相对寻址 beq flag (思想相似于GOTO)
flag:(标号)
2.3:指令后缀
同一指令常常附带不一样后缀,变成不一样的指令。常常使用的后缀有:
(1)B(byte)功能不变,操做长度变为8位
(2)H(half word)功能不变,长度变为16位
(3)S(signed)功能不变,操做数变为有符号
如 ldr(加载) ldrb (加载bytel) drh ldrsb ldrsh
(4)S(S标志)功能不变,影响CPSR标志位
如 mov和movs movs r0, #0
影响Z。
2.4:条件执行后缀
GT greater than
LT less than
例如:
mov r0, r1 @ 至关于C语言中的r0 = r1;
moveq r0, r1 @ 若是eq后缀成立,则直接执行mov r0, r1;若是eq不成立则 本句代码直接做废,至关于没有
@ 相似于C语言中 if (eq){r0 = r1;}
条件后缀执行注意2点:
一、条件后缀是否成立,不是取决于本句代码,而是取决于这句代码以前的代码运行后的结果。
二、条件后缀决定了本句代码是否被执行,而不会影响上一句和下一句代码是否被执行。
2.5:多级指令流水线
(1)为增长处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工做原理示意图。(S5PV210使用13级流水线,ARM11为8级)
容许多个操做同时处理,而非顺序执行。
(2)PC指向正被取指的指令,而非正在执行的指令