ARM 第一个汇编程序(跳转,循环,reset_handler,swi_handler 软件中断)
来源:互联网 发布:男生衣服搭配软件 编辑:程序博客网 时间:2024/06/13 06:03
AREA demo, CODE, READONLY
ENTRY
b reset_handler //0x0复位入口
nop
b swi_handler ////0x08 软件中断入口
nop
nop
nop
nop //0x18 TRQ(硬件中断)入口
nop
swi_handler ///0x08 软件中断程序
sub r0,lr,#4 //lr(r14)中存的是中断之前程序的下一条程序地址
减去4之后就是中断时的地址
ldr r1,[r0] //从地址中取出地址放到r1 里 ldr r2,[r13] 为出栈
str r2,[r13] 为入栈 ,str往内存中写,ldr从内存中读
bic r1,r1,#0xff000000 // 将r1的高八位清零 类似的
orr r1,r1,#0xff000000将高八位置1;
cmp r1,#0x01 //比较之后会置状态位
beq call1 //判断,相等跳转,不等执行下一条
cmp r1,#0x02
beq call2
movs pc, lr //movs 在 p156 ,将lr 给pc 完成跳转,同时将spsr给cpsr
完成模式切换,spsr为之前的模式状态,cpsr为当前模式
call1
add r4,r3,r2
movs pc, lr
call2
sub r4,r3,r2
movs pc, lr
reset_handler
mov r13, #0x1000 //设置栈位置 sp(r13)栈指针
mrs r0,cpsr
mov r0, #0xd0
msr cpsr_c, r0 //切换模式 d0 为sur模式 d3为svc模式,d2为IRQ模式
mov r1, r13
mov r0, #0xd3
msr cpsr_c, r0 //将状态寄存器中的内容读出(msr,mrs)特权指令
mov r1, r13
mov r2, #2
mov r3, #3
swi 0x1 //参数变化是其指令机器码不同,后几位为参数,
mov r9, r4
mov r2, #2
mov r3, #3
swi 0x2
mov r10, r4
b reset_handler
mov r13,#0x8100
mov r0,#11
mov r2,#0
mov r1,#100
bl delay // 返回式跳转 b 是不返回 ;
机器码 前几位0xea e代表无条件执行,a代表不返回,若a换成l则返回
b . //死循环
doadd
add r2,r2,r1
sub r1,r1,#1
cmp r1,#0
bne doadd
delay
str r2,[r13] //将r2值入栈保护
mov r2,#4
dd
sub r2,r2,#1
cmp r2,#0
bne dd
ldr r2,[r13]
mov pc,lr //返回式跳转时r14(lr) 存的是跳转之前的下一条指令的地址
END
- ARM 第一个汇编程序(跳转,循环,reset_handler,swi_handler 软件中断)
- 第一个ARM汇编程序
- 第一个ARM汇编程序
- 第一个ARM汇编程序——冒泡排序
- 第一个汇编程序
- 第一个汇编程序
- 第一个汇编程序
- 调试第一个汇编程序
- 第一个汇编程序
- 第一个汇编程序
- 第一个汇编程序分析
- 第一个汇编程序
- 第一个汇编程序
- 第一个masm32汇编程序
- 俺的第一个汇编程序
- 我的第一个汇编程序
- 调试第一个汇编程序(上)
- 调试第一个汇编程序(下)
- 动态分配malloc realloc free
- 进程和线程的区别
- C语言的格式化输入将回车输入的问题
- STC12C5A60S2 单片机资料
- 嵌入式中__main 和main 作用
- ARM 第一个汇编程序(跳转,循环,reset_handler,swi_handler 软件中断)
- 阅读ARm芯片手册 阅读方法
- arm 工作模式 寄存器组织
- friendarm 6410板子在windows的第一个程序 (下程序,在模拟dos终端编译汇编,C)
- ubuntu 9.10 在vmware上安装虚拟机步骤;
- 面向对象的特征
- s3c6410 s3c2440串口发送接收数据的实现(轮询)及相关寄存器
- 函数指针 往指定内存中写数据
- 2440 Xmodem协议传送文件的简单实现