几个ARM指令操作的汇编实现
2013-06-09 15:03
387 查看
下面几段小程序是在学习ARM指令应用是记下的。感觉比较经典,做一下整理。
1.长跳转(为了实现arm 4GB范围的跳转,三级流水)
START ;主程序体
。。。
ADD LR,PC,#4
CALL_SUB LDR PC,[PC,#-4]
DCD FUNCTION
RETURN 。。。
FUNCTION 。。。
MOV PC,LR
2.多路跳转(在多个处理程序中进行选择)
START :主程序体
。。。
LDR R0, [R1] ;从【R1】I/O地址读索引号
CMP R0,MAXINDEX
LDRL PC,[PC,R0,LSL#2]
B INDEXOUTOFLANG
DCD HANDLER0
DCD HANDLER1
DCD HANDLER2
。。。
3.子程序的进入和退出
X_FUNCTIONG
STMFD R13!,{R4-R12,R14}
。。。
LDMFD R13!,{R4,R12,PC}^
4.软中断
SWIHANDLER
STMFD SP!,{R0,R3,R12,LR}
MRS R0,SPSR_SVC
TST R0,#0X20 :测试cpsr【T】位
LDRNEH R0,[LR,#-2]
BICNE R0,#0XFF00
LDREQ R0,[LR,#-4]
BICNE R0,#0XFF000000
CMP R0,#MAX_SWI
LDRLS PC,[PC,R0,LSL #2]
B SWI_OUT_RANGE
DCD DO_SWI_0
5.IRQ响应
IRQHANDLER
SUB R14,R14,#4
STMFD R13!,{R12,R14}
MRS R12,SPSR_IRQ
STMFD R13!,{R12}
MOV R12,#INTBASE
LDR R12,[R12,#INTLEVER]
MRS R14,CPSR
BIC R14,R14,#0X80 ;设置CPSR[I]为0 即允许irq嵌套
MSR CPSR_C,R14
LDR PC,[PC,R12,LSL #2]
NOP ;站位符 因为三级流水
DCD PRIORITY_0_HANDLER
6.数据/指令预取中止
ABTHANDLER
SUB LR,LR,#4 ;数据访问中止此处立即数为#8
STMFD SP!,{RIGLIST,LR}
。。。
LDMFD SP!,{RIGLIST,PC}^
1.长跳转(为了实现arm 4GB范围的跳转,三级流水)
START ;主程序体
。。。
ADD LR,PC,#4
CALL_SUB LDR PC,[PC,#-4]
DCD FUNCTION
RETURN 。。。
FUNCTION 。。。
MOV PC,LR
2.多路跳转(在多个处理程序中进行选择)
START :主程序体
。。。
LDR R0, [R1] ;从【R1】I/O地址读索引号
CMP R0,MAXINDEX
LDRL PC,[PC,R0,LSL#2]
B INDEXOUTOFLANG
DCD HANDLER0
DCD HANDLER1
DCD HANDLER2
。。。
3.子程序的进入和退出
X_FUNCTIONG
STMFD R13!,{R4-R12,R14}
。。。
LDMFD R13!,{R4,R12,PC}^
4.软中断
SWIHANDLER
STMFD SP!,{R0,R3,R12,LR}
MRS R0,SPSR_SVC
TST R0,#0X20 :测试cpsr【T】位
LDRNEH R0,[LR,#-2]
BICNE R0,#0XFF00
LDREQ R0,[LR,#-4]
BICNE R0,#0XFF000000
CMP R0,#MAX_SWI
LDRLS PC,[PC,R0,LSL #2]
B SWI_OUT_RANGE
DCD DO_SWI_0
5.IRQ响应
IRQHANDLER
SUB R14,R14,#4
STMFD R13!,{R12,R14}
MRS R12,SPSR_IRQ
STMFD R13!,{R12}
MOV R12,#INTBASE
LDR R12,[R12,#INTLEVER]
MRS R14,CPSR
BIC R14,R14,#0X80 ;设置CPSR[I]为0 即允许irq嵌套
MSR CPSR_C,R14
LDR PC,[PC,R12,LSL #2]
NOP ;站位符 因为三级流水
DCD PRIORITY_0_HANDLER
6.数据/指令预取中止
ABTHANDLER
SUB LR,LR,#4 ;数据访问中止此处立即数为#8
STMFD SP!,{RIGLIST,LR}
。。。
LDMFD SP!,{RIGLIST,PC}^
相关文章推荐
- 几个c++语句的汇编实现(H1指令)
- 8086汇编学习之寻址方式、数据类型以及几个数据操作指令
- ARM汇编指令学习 - 实现数据块拷贝
- ARM汇编指令 具体操作例子
- ARM汇编指令学习 - 实现数据块的拷贝复制
- ARM:伪指令、伪操作、C和汇编混合操作、汇编控制LED
- arm架构的独占读写指令ldrex和strex的使用详解(原子操作和自旋锁实现的基本原理)
- 自己写的几个ARM汇编内存操作函数
- ARM汇编常用指令空操作NOP指令
- arm汇编编写countnum加1的实现(LDR STR ADD 指令)
- 自己写的几个ARM汇编内存操作函数
- [中级教程]GNU ARM汇编程序开发之----几个常用的指令
- 15_ARM汇编自学笔记指令系统之移位指令(操作)
- 影响CPSR状态寄存器的ARM汇编指令--总结
- ARM汇编伪指令 .word
- wince系统下用arm汇编实现特定长度的memory拷贝函数,降低系统cpuloading
- ARM汇编中B跳转指令和LDR跳转的区别
- 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)
- ARM汇编中^、!、cxsf符号和movs等指令使用
- gcc 嵌入式汇编(asm)实现bsr(位扫描)指令