arm汇编指令
来源:互联网 发布:知乎下载电脑版 编辑:程序博客网 时间:2024/05/29 15:46
//一般ARM官方风格汇编指令为大写,windows/ADS/MDK
//实际运用一般用GNU风格,为小写,linux
(1)
•ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被 CPU处理
•ldr(loadregister)指令将内存内容加载入通用寄存器。
•str(storeregister)指令将寄存器内容存入内存空间中。
•ldr/str组合用来实现ARM CPU和内存数据交换
ARM模式/thumb模式(16位)
各模式及对应的寄存器(S5PV210):
(2)
•寄存器寻址 mov r1, r2
•立即寻址 mov r0, #0xFF00
•寄存器移位寻址 mov r0, r1, lsl #3
•寄存器间接寻址 ldr r1, [r2]
•基址变址寻址 ldr r1, [r2, #4]
•多寄存器寻址 ldmia r1!, {r2-r7, r12} //保存现场是可用到
•堆栈寻址 stmfd sp!, {r2-r7, lr} //恢复现场是用到,此时寄存器指的是后者
•相对寻址 beq flag
常用指令:
算数指令:ADD ,SUB,MVL
逻辑与比较指令:AND,ORR,BIC,EOR
读写CPSR指令:MRS,MSR //MRS中R在前面,用来读CPSR;MSR用来写到CPSR中去
跳转指令:b(不打算返回的),bl(返回地址保存在lr,用于函数调用),bx(并切换ARM模式,用于异常跳转)
访存指令:LDR(可用作伪指令,=XXX实现立即数合法化),STR,STM,LDM,ADR(伪指令,相对于LDR,短跳转
,编译时以PC为基准,用ADD/SUB代替;而LDR长跳转,以链接地址为基准,用MOV代替)
软中断指令:SWI陷入,实现系统调用。
伪指令:ADR,LDR,NOP(空操作),ADRL(中等范围地址加载指令),其他伪指令
•.global _start @ 给_start外部链接属性
•.section .text @ 指定当前段为代码段
•.ascii .byte .short .long .word
•.quad .float .string @ 定义数据
•.align 4 @以16字节对齐
•.balignl 16 0xabcdefgh @ 16字节对齐填充
•.equ @类似于C中宏定义
(3)指令执行后缀
•同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
•B(byte)功能不变,操作长度变为8位
•H(halfword)功能不变,长度变为16位
•S(signed)功能不变,操作数变为有符号
•如 ldr ldrb ldrh ldrsb ldrsh
•S(S标志)功能不变,影响CPSR标志位
•如 mov和movs movs r0, #0
常用后缀:
•ia(increaseafter)先传输,再地址+4
•ib(increasebefore)先地址+4,再传输
•da(decreaseafter)先传输,再地址-4
•db(decreasebefore)先地址-4,再传输
•fd(fulldecrease)满递减堆栈
•ed(emptydecrease)空递减堆栈
•fa(·······) 满递增堆栈
•ea(·······)空递增堆栈
一般使用满减栈,即用ldmia,stmfd操作。
常用符号后缀:^在目标寄存器中有PC寄存器时,会将SPSR写回至CPSR(现场恢复)
LDMIA r0!,{r2-r3} r0的值在ldm过程中发生的改变(+/-)写回到r0中
(4)条件执行后缀
(5)协处理器指令
ARM理论可支持16个协处理器,实际上只实现CP15(coprocessor)
协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理等有关。
用MRC读,MCR写
•mcr{<cond>} p15, <opcode_1>, <Rd>,<Crn>, <Crm>, {<opcode_2>}
•opcode_1:对于cp15永远为0
•Rd:ARM的普通寄存器
•Crn:cp15的寄存器,合法值是c0~c15
•Crm:cp15的寄存器,一般均设为c0
•opcode_2:一般省略或为0
记住格式:p15 0 普通Disco 后面三个cp15的参数(? c0 0)
0 0
- ARM 汇编伪指令
- ARM汇编指令集
- GNU ARM汇编指令
- 常用ARM汇编指令
- ARM汇编指令集
- ARM汇编伪指令
- ARM汇编伪指令
- ARM汇编指令集
- ARM汇编伪指令
- GNU ARM 汇编指令
- ARM汇编指令集
- arm 汇编指令 积累
- ARM汇编指令集
- ARM汇编指令集
- ARM常用汇编指令
- ARM汇编指令集
- GNU ARM 汇编指令
- ARM汇编指令集
- java中 抽象类构造方法的理解
- http协议
- UVA10733
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 值传递和引用传递
- arm汇编指令
- 设计模式之责任链模式
- 2016多校训练Contest5: 1001 ATM Mechine hdu5781
- matlab中在图像上划线 画圈的方法
- iOS 双击状态栏滚到视图顶部无效
- 正则表达式学习总结
- 20条Linux命令面试问答
- Redis与Memcache的对比
- js闭包二:应用场景