Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65498
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 22
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 16:23
文章分类

全部博文(12)

文章存档

2014年(4)

2013年(8)

我的朋友

分类: LINUX

2013-12-05 16:27:21

原文地址:ARM 指令举例 作者:frankzfz

下面是转载网上的一篇文章,主要目的是查看注释。

点击(此处)折叠或打开

  1. SWI_Exception:
  2. STMFD SP!, {R2-R3,LR} //把R2,R3,LR值入栈
  3. #0号软中断的处理程序
  4. CMP R0, #0 //将R0和0比较
  5. //以下4行带EQ条件的代码均为当R0为0时应该执行的语句
  6. MRSEQ R2, SPSR //把SPSR读入到R2中
  7. STREQ R2, [R1] /把R2的值存入到[R1]中
  8. ORREQ R2, R2, #0x80 //把R2的Bit7位置1
  9. MSREQ SPSR_c, R2 //把R2的值写入到SPSR_c中,即禁止IRQ
  10. #1号软中断的处理程序
  11. CMP R0, #1 //比较R0值和1
  12. LDREQ R2, [R1] //相等则把[R1]中的数据存入R2中
  13. MSREQ SPSR_c, R2 //相等把R2的值写入到SPSR_c中,恢复IRQ
  14. #11号软中断的处理程序
  15. CMP R0, #11 //比较R0的值和11
  16. MRSEQ R2, SPSR //相等则把SPSR的值转存入到R2中
  17. BICEQ R2, R2, #0x1F //相等则把R2的Bit0~Bit4全部清零
  18. ORREQ R2, R2, #Mode_SYS //相等则把R2与#Mode_SYS相与再存入R2
  19. MSREQ SPSR_c, R2 //相等则把R2的值存入SPSR_c中,即进入系统模式
  20. #12号软中断的处理程序
  21. CMP R0, #12 //比较R0的值和12
  22. MRSEQ R2, SPSR //相等则把SPSR的值存入R2
  23. BICEQ R2, R2, #0x1F //相等则把R2的Bit0~Bit4清零
  24. ORREQ R2, R2, #Mode_USR //相等则把R2与#Mode_USR相与再存入R2中
  25. MSREQ SPSR_c, R2 //相等则把R2存入SPSR_c,即进入用户模式
  26. LDMFD SP!, {R2-R3,PC} //恢复R2、R3、PC值,返回
  27. .END //汇编代码段结束

阅读(1420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~