汇编随笔
来源:互联网 发布:学摄影的书籍知乎 编辑:程序博客网 时间:2024/06/08 17:39
伪指令
AREA指令
DCB DCD指令
B跳转指令
在ARM程序中有两种方法可以实现程序流程的跳转:
1,直接向程序计数器PC写入跳转地址值。
通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用
MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。
2,使用跳转指令。
ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:
1,B 跳转指令
2,BL 带返回的跳转指令
3,BLX 带返回和状态切换的跳转指令
4,BX 带状态切换的跳转指令
CPSID CPSIE 快速的开关中断指令
CPSID CPSIE 用于快速的开关中断。UCOSII中在
注:I:IRQ ; F:FIQ。在Cortex内核中没有FIQ中断,都按IRQ处理。
指令示例:
临界代码函数:
OS_CPU_SR_Save
MRS R0, PRIMASK ;读取primask到R0,R0为返回值
CPSID I ;PRIMASK=1,关中断
BX LR ;返回
LDR STR数据传输指令
Cortex内核用的比较多的是伪指令方式,虽然LDR伪指令和ARM的LDR指令很像,但是作用不太一样。LDR伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如: ldr r0, =0x12345678 这样,就把0x12345678这个地址写到r0中了,而不是0x12345678地址所存储的值。
例如:
LDR R1,=COUNT ;这条伪指令,是将COUNT的地址赋给R1
LDR R0,[R1] ;将COUNT的值赋给R0
其他详细用法见下链接。
http://blog.csdn.net/tanyouliang/article/details/6767011
MRS与MSR指令
a,MRS Move to Register from State register
MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。
使用格式:
MRS{条件} 通用寄存器,特殊功能寄存器(Cortex内核中是PRIMASK或FAULTMASK,其他内核通常为CPSR或SPSR;当条件为空的时候语句无条件执行)
该指令一般用在以下情况:
I.当需要改变程序状态寄存器的内容时,通常使用:读取-修改-写回的步骤,MRS指令用于将程序状态寄存器的内容读取到通用寄存器中,然后更改。
II.当在异常处理戒迕程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄
存器的值,然后保存。
指令示例:
临界代码段使用的函数
OS_CPU_SR_Save
MRS R0, PRIMASK ;读取primask到R0,R0为返回值
CPSID I ;PRIMASK=1,关中断。
BX LR ;·
b,MSR Move from State registerto Register
MRS指令用于将通用寄存器的内容读取到特殊功能寄存器中。
该指令一般用在以下情况:
I.当需要改变特殊功能寄存器的内容时,通常使用:读取-修改-写回的步骤,MSR指令可以把通用寄存器的值写回到特殊功能寄存器。
II.当退出异常中断处理器程序时,如果事先保存了特殊功能寄存器的内容通常通过MSR指令将事先保存的特殊功能寄存器内容恢复到特殊功能寄存器中。
指令示例:
临界代码段使用的函数
OS_CPU_SR_Restore
MSR PRIMASK, R0 ;把R0的参数读取到primask寄存器中
BX LR ;
- 汇编随笔
- 汇编随笔
- win32汇编学习随笔(1)
- 随笔之GoldFish Kernel启动过程中arm汇编分析
- 随笔之GoldFish Kernel启动过程中arm汇编分析
- 随笔之GoldFish Kernel启动过程中arm汇编分析
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- equals与==之间的区别
- 使用Spring(二)实例化方式(静态工厂,实例工厂)
- The Log(我所读过的最好的一篇分布式技术文章)
- 从“鞭打快牛”故事来看团队的领导力
- Codeforces Round #377 (Div. 2)题解报告
- 汇编随笔
- 动态规划之最长回文子字符串(Longest Palindromic Substring)
- PHP+MySQL查询,Unexpected taken s 错误解决方法
- 第八周项目1-建立顺序串的算法库
- 驱动中获取进程完整路径名
- iOS10推送必看UNNotificationServiceExtension
- 设置动态id,并进行函数操作
- Java实现的LU分解,高斯消去法求线性方程组的解
- 车牌识别之OpenCV安装配置篇