[教育]第4章 指令集.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[教育]第4章 指令集

... ;如果该信号量正被别的进程占用,则使当前进程休眠一段时间,以保证操作系统能够进行任务调度 … BNE spinin ;进程重新尝试获取该信号量 STR R1, [R0] ;当前进程得到该信号量,将自己的进程标识符写入到内存单元R0处 … ;这里是该信号量所保护的临界区数据 … spinout SWP R3, R2, R[0] ;将信号量值读取到R3中,同时将其值设置成-1 CMN R3, #1 ;判断读取到的信号量值是否为-1,即是否有其他进程正在访 问该信号量 … ;如果有其他进程正在访问该信号量,则使当前进程休眠一段时间,以保证操作系统能够进行任务调度 … BEQ spinout ;如果有其他进程正在访问该信号量,跳转到spinout处执行 CMP R3, R1 ;判断是否当前进程拥有该信号量 BNE CorruptSemaphore ;如果不是则系统出现错误 MOV R2, #0 ;如果系统正常,重新将该信号量设置为可用,即0 STR R2,[R0] 返回 六、与系统相关的一些指令代码段 1、SWI中段处理程序示例 SWI指令使处理器切换到特权模式,在特权模式下请求特定 的系统服务。当SWI指令执行时通常完成下面的工作: R14_svc=SWI 指令的下面一条指令的地址(即SWI中断处理 程序的返回地址) SPSR_svc=CPSR ;保存当前CPSR CPSR[4:0]=0b10011 ;使处理器切换到特权模式 CPSR[5]=0 ;使程序进入ARM状态 CPSR[7]=1 ;禁止正常中断响应 If high vectors configured then ;程序跳转到相应的中断向量处 PC=0xFFFF0008 else PC=0下面的代码段是SWI中断处理程序的基本框架: SWIHandler STMFD sp!, {r0-r3, r12, lr} ;保存相关的寄存器 MRS r0, spsr ;将SPSR内容传送到R0中 TST r0, #0x20 ;判断程序状态是否为ARM状态 LDRNEH r0, [lr, #-2] ;如果是Thumb状态, BICNE r0, r0, #0xff00 ;提取SWI指令中相应的8位立即数 LDREQ r0, [lr, #-4] ;如果是ARM状态, BICEQ r0, r0, #0xff000000;提取SWI指令中相应的24位立即数 接下页… CMP r0, #MaxSWI ;判断指令请求的服务的序号是否超过合法范围 LDRLS pc, [pc, r0, LSL #2] ;如果没有超出范围,跳转到相应的服务程序执行 B SWIOut0fRange ;如果超出了合法范围,跳转到错误处理程序 switable ;下面是各服务程序的函数地址表 DCD do_swi_0 ;服务程序do_swi_0的首地址,该服务对应的SWI 指令中立即数为0 DCD do_swi_1 ; 该服务对应的SWI指令中立即数为1 : : do_swi_0 ;服务程序do

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档