一、SWI软件中断原理。

在特权模式下,处理器模式切换可以通过软件控制进行切换,即修改 CPSR 的模式位。但在用户模式下,是没有权限通过修改 CPSR 实现模式转换的,除非 通过外部中断或是异常处理过程进行切换。为方便在用户模式下灵活实现模式的 转换, ARM 指令集提供了产生异常的指令,即软件中断指令 SWI 。也就是说用 户程序里可以通过写入 SWI 指令来切换到特权模式,当 CPU 执行到 SWI 指令时会 从用户模式切换到管理模式下,执行软件中断处理。在其他模式下也可以使用 SWI 指令,处理器同样切换到管理模式。

指令格式:
SWI{cond} immed_24
其中: immed_24 为 24 位立即数,值为从 0――16777215 之间的整数。它 用来做用户程序和软中断处理程序之间的接头暗号。通过该软中断立即数来区分 用户不同操作。

指令编码格式:

指令举例:
SWI 1;产生 1 号软中断

指令说明:
在用户模式下调用 SWI 软中断指令,可使处理器跳转至 SWI 中断向量表所对 应的地址中,继而跳入软中断处理程序

中。在软中断处理程序中,可根据软中断号,实现不同的操作。软中断号的判断方法如下:

LDR R4, [LR, #-4] ; LR 为硬件自动保存 SWI xxx 指令的下一条指令地址
; LR – 4 就是 SWI 指令地址
BIC R4, R4, #0xFF000000 ;将 SWI 指令高 8 位清除掉,只保留低 24 位立
; 即数,取得SWI指令编码,则 R4 即为 SWI
;指令后的软中断号;

二、代码

 AREA Stack1,DATA,READWRITE
stack1 DCD 10*512PRESERVE8AREA TEST,CODE,READONLYCODE32ENTRYb resetb _undefined_instructionb _software_interruptb _prefetch_abortb _data_abortb _not_usedb _irqb _fiq
_undefined_instructionnop
_prefetch_abortnop
_data_abortnop
_not_usednop
_irqnop
_fiqnop
resetmrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr_c,r0 ;Enable svc mode of cpu
init_stackldr r0,=stack1 ;get stack top pointer*/;svc mode stackmov sp,r0sub r0,#128*4 ;/*512 byte for irq mode of stack*/;/****irq mode stack**/msr cpsr_c,#0xd2mov sp,r0sub r0,#128*4 ;/*512 byte for irq mode of stack*/;/***fiq mode stack***/msr cpsr_c,#0xd1mov sp,r0sub r0,#0;/***abort mode stack***/msr cpsr_c,#0xd7mov sp,r0sub r0,#0;/***undefine mode stack***/msr cpsr_c,#0xdbmov sp,r0sub r0,#0;/*** sys mode and usr mode stack ***/msr cpsr_c,#0x10mov sp,r0 ;/*1024 byte for user mode of stack*/swi 1swi 2
LOOPB LOOP
_software_interruptSTMFD SP!, {R0-R4, LR} ; 保存程序执行现场LDR R4, [LR, #-4] ; LR - 4 为指令" swi xxx" 的地址,低 24 位 是 软件中断号BIC R4, R4, #0xFF000000 ; 取得 ARM 指令 24 位立即数CMP R4, #1ADDEQ R5,R5,#1 ; 判断 24 位立即数,如果为 1,则执行R5+1 操作LDREQ PC, =swi_return ; 软中断处理返回CMP R4, #2 ; 判断 24 位立即数,如果为 2,则执行 R6+1 操作ADDEQ R6,R6,#1LDREQ PC, =swi_return ; 软中断处理返回地址
swi_returnLDMFD SP!, {R0-R4, PC}^ ; 中断返回, ^表示将 spsr 的值复制到 cpsrEND

PS:

1. bic
BIC指令的格式为:
BIC{条件}{S}  目的寄存器,操作数1,操作数2
BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,
操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在
掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。

bic r0,r0,#0x1f
0x1f=11111b
其含义:清除r0的bit[4:0]位。

2,orr
ORR指令的格式为:
ORR{条件}{S}  目的寄存器,操作数1,操作数2
ORR指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。操作数1应该是一
个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操
作数1的某些位。
指令示例:
ORR R0,R0,#3          ;  该指令设置R0的0、1位,其余位保持不变。

orr r0,r0,#0xd3
     0xd3=1101 0111
     将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。

ARM9 SWI软件中断相关推荐

  1. ARM 软中断指令SWI

    出处:https://blog.csdn.net/zqixiao_09/article/details/50776191 前面我们学习ARM工作模式中,处理器模式切换可以通过软件控制进行切换,即修改C ...

  2. ARM处理器基本指令大全

    目录 一.ARM的7种运行模式和2种工作状态 二.ARM支持的异常类型 三.ARM基本指令及功能描述 一.ARM的7种运行模式和2种工作状态 1.七种运行模式 处理器工作模式 特权模式 异常模式 说明 ...

  3. [DSP 日常记录] #2 TI DSP 的简单介绍与 DSP 的一些名词解释

    将原先自己别处写的两篇博文汇总在这里 [内容仅针对 TI 公司生产的 DSP] TI公司的主要处理器产品列表 参考:TI.WIKI 一.MCUs 微处理器 16-bit 超低功耗处理器 -- MSP4 ...

  4. Android SO逆向1-ARM介绍

    原文: http://drops.wooyun.org/mobile/10009 0x00 概述 把之前学习SO逆向的笔记分享出来,内容比较简单,大牛就可以略过了. 0x01 ARM寄存器 1.1.通 ...

  5. 什么是SVC模式【转】

    转自:http://blog.csdn.net/jobsss/article/details/7548550 版权声明:本文为博主原创文章,未经博主允许不得转载. ARM 处理器有二十七个寄存器,其中 ...

  6. S3C2440 汇编指令

    arm汇编指令集 算术和逻辑指令 adc : 带进位的加法 (addition with carry) adc{条件}{s}  <dest>, <op 1>, <op 2 ...

  7. ARM Cortex M3指令集

    一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...

  8. linux命令mov,汇编指令_Y-linuz-linux-w_新浪博客

    ARM处理器有37个寄存器,其中31个通用寄存器,6个程序状态寄存器. R0~R7为不分组的通用寄存器,R8~R14为分组寄存器---不同工作模式下寄存器不同 R13:指向堆栈栈顶指针SP R14:用 ...

  9. ARM汇编指令(ARM寻址方式、汇编指令、伪指令

    1.寻址方式 所谓寻址方式就是:处理器根据指令中给出的地址信息来寻找物理地址的方法. 1)立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就是在指令中给出的. 只要取出指令也就是取 ...

最新文章

  1. jdk8中流的使用(二)
  2. 概率论-2.7 分布的其他特征函数
  3. [PAT乙级]1016 部分A+B
  4. Java笔记-使用logback按天生成日志并按等级进行分类
  5. 在html中定位属性怎么用,CSS元素定位的使用方法
  6. 远程控制slam小车及pid调试PC与树莓派ssh链接时出现间歇性联通段开网络故障acailable I Destination Host Unreachable_然后5s后切换了一个地图
  7. 2013年云计算发展展望:混合云即将起飞
  8. winserver2012安装语言包
  9. 软件开发成本评估怎么做?软件开发成本评估从哪些方面进行?
  10. wampserver大红色橘色变成绿色
  11. ng-zorro里的“Descriptions描述列表”使用
  12. 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校计算机科学硕士设置
  13. 使用ActiveMQ中间件方式发送邮件
  14. Unity3d:UGUI源码,Rebuild优化
  15. 从趋势、风格和文案三方面,分析短视频封面这样设计更吸引人。
  16. 读书百客:《题竹林寺》简析
  17. java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署
  18. EasyRecovery15电脑装机下载必备的数据恢复软件
  19. Weex 的采坑指南
  20. MFC——我的第一个MFC

热门文章

  1. 95%置信区间计算-理解
  2. angr原理与实践(三)——Arbiter:一种弥合二进制程序漏洞发现中的静态和动态鸿沟
  3. 运算符重载为成员函数,友元函数
  4. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果
  5. vue-cli3使用iview
  6. workflow了解
  7. fresco+recycleview多条目
  8. IE标签页去掉东方头条什么的垃圾信息
  9. En-Tan-Mo(ETM)项目周报(8.23-8.29)
  10. Android Studio 开发–微信APP门户界面设计