huangfu Blog
Love Leanote!
Toggle navigation
huangfu Blog
主页
About Me
归档
标签
ARM汇编入门
2018-04-02 20:15:53
1870
0
0
tarena
[TOC] #ARM汇编分类 * ARM标准汇编 适用于ARM公司的汇编器,适合在Windows平台下使用,如ADS中使用 * GNU汇编 适用于GNU交叉编译工具链中的汇编器,适合于Linux平台下使用 #ARM汇编程序框架 .section .data ; 这里.section常常省略 <初始化数据> .section .bss ; 这里.section常常省略 <未初始化数据> .section .text ; 这里.section常常省略 .global __start ; 如果其他文件调用__start,则需要.global声明 __start: ; 标签,相当于函数入口 <汇编代码> #寻址方式 * 立即数寻址 ADD R0, R0, #0x3F * 寄存器寻址 ADD R0, R1, R2 * 寄存器间接寻址 LDR R0, [R2] ;相当于指针 * 基址变址寻址 LDR R0, [R1, #4] * 相对寻址 BL NECT ; NEXT为标签 #程序状态寄存器 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148f) #条件 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148e) ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a9001490) #指令分类学习 ##算数和逻辑指令 ###mov 传送 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148b) ###mvn 传送取饭的值 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001492) ###sub 减法 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a9001488) ###add 加法 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001496) ###and 逻辑与 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001491) ###bic 位清除 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001497) ##比较指令 ###cmp 比较 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148d) ###tst 测试位 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148c) ##跳转指令 ###b 分支 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001498) ###bl 带连接分支 ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001494) ##移位指令 ![](https://leanote.com/api/file/getImage?fileId=5ac105e9ab644145a900148a) ###lsl 逻辑左移 ###ror 循环右移(补0) ###asr 算数右移(补符号位) ##程序状态字访问指令 ###msr s -> r ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001495) ###mrs r -> s ![](https://leanote.com/api/file/getImage?fileId=5ac105eaab644145a9001493) ##存储器访问指令 ###ldr 内存 -> 寄存器 ###str 寄存器 -> 内存 #伪指令 伪指令并没有对应的机器码,它只是在编译的时候起作用,或转化为其他的实际指令来运行。 ##定义类伪指令 ###.global 表明一个标号为全局 ###.ascii 定义字符串数据 ###.byte 定义字节数据 ###.word 定义字数据 ###.data 表明数据段 .data varA: .ascii "helloworld" varB: .word 0xff varC: .byte 0x1 .text ... ###.equ 定义一个宏 .equ DA, 0x89 mov r0, #DA ###.align 对齐 .align 4 ;下面地址4字节对齐 ... ... .align 8 ;下面地址8字节对齐 ... ... ##操作类伪指令 ###nop 空操作 mov r0, r0 ###ldr 解决mov指令操作数限制 mov指令中操作数长度为12位,其中8位立即数,4位移位个数(该值*2为实际右移位数),因此一个合法的立即数应该可以8位常数循环右移偶数位可得到。 ldr r0, =0x1FF ;mov r0, #0x1FF #协处理指令 ##什么是协处理器?cp15 ARM最多可支持16个协处理器,其中cp15是最重要的一个 ###cp15的作用 cp15是一个系统控制协处理器,它提供一些额外的寄存器,通过这些寄存器可以配置与控制cache、mmu及时钟等重要硬件。 cortex-A8中cp15提供了16组寄存器供用户访问使用。 ###cp15寄存器组 ##协处理器访问指令 cp15提供的额外寄存器,只能通过协处理器访问指令访问 ![](https://leanote.com/api/file/getImage?fileId=5ac21f81ab64412510001af6) ###mcr reg 到 cp15 ###mrc cp15 到 reg
上一篇: 无
下一篇:
10继承(构造,析构,拷贝构造,赋值运算符)/名字隐藏机制
0
赞
1870 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册