分类: 嵌入式
2011-07-06 17:42:47
;
; ARM汇编编程 函数调用
;
; 定义代码段
AREA Code, CODE
ENTRY
CODE32 ; 声明代码是32位
START
LDR R0, =0x12345678
BL fun ; 进入子函数
STOP
CODE32
MOV R0, #0X18
LDR R1, =0X20026
SWI 0X123456
;
; 函数把32位数按字节逆排序,字节二进制逆排序,最后得到一个新的数字
; 入口参数 R0 -> 原操作数
; 出口参数 R0 -> 新生成的数
;
fun
MOV R2, #31 ; 循环次数
MOV R1, #0 ; 先取反把R1全设为1
LOOP
TST R0, #1 ; 测试是否为1
MOVNE R3, #1
ORRNE R1, R1, R3, LSL R2 ; 在缓冲寄存器中相应位置1
MOV R0, R0, LSR #1
SUBS R2, R2, #1
BNE LOOP
MOV R0, R1
BX LR ; 函数返回
END
;
; ARM汇编编程 函数实现开关中断
;
; 定义代码段
AREA Code, CODE
ENTRY
CODE32 ; 声明代码是32位
START
BL closeinput
BL openinput
STOP
CODE32
MOV R0, #0X18
LDR R1, =0X20026
SWI 0X123456
; 关中断
closeinput
MRS R0, CPSR
ORR R0, R0, #(0x01<<7)
MSR CPSR_c, R0
BX LR
; 开中断
openinput
MRS R0, CPSR
BIC R0,R0, #1<<7
MSR CPSR_c, R0
BX LR
END