- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统原理-第3章分析
LOGO 3 ARM9汇编语言 ARM9微处理器采用的是ARMv4版本的指令集架构,其指令集代码的格式如: 3.1 ARM9指令集 32位的ARM指令集由14种基本指令类型组成。指令操作码中的Cond子域是条件域,它表明ARM指令集中的所有指令是有条件执行的。 指令执行的条件是根据CPSR寄存器中的状态标志位和指令的条件域确定,见下表: 寄存器装载及存储类指令 这类指令是最常用的指令之一。它们把数据从存储器单元中装载(读入)到微处理器核的寄存器(即R0~R15)中,或者把微处理器核的寄存器中的数据存储(写入)到存储器单元中。 (1)单一数据加载/存储指令:LDR/STR 指令书写格式: (1)LDR/STR{条件码}{B} Rd,[Rn] (2)LDR/STR{条件码}{B} Rd,[Rn,Flexoffset] {!} (3)LDR/STR{条件码}{B} Rd,label (4)LDR/STR{条件码}{B} Rd,[Rn],Flexoffset 下面是几条LDR/STR指令书写的示例: LDR R2,[R5] ;无偏移量,R2←[R5] LDREQ R5,[R6,#28]! ;(若相等)R5←[R6+28],R6←R6+28 LDR R8,label ;加载一个字到R8,该字存于label对应单元处 STR R1,[R3],# -6! ;R1→[R3],R3←R3-6 STRB R0,[R3,-R8 ASR #2] ;R0的最低字节→[R3-R8/4]单元的低字节 (2)多数据加载/存储指令:LDM和STM。 指令书写格式: LDM/STM{条件码}类型 Rn{!},寄存器列表{^} 指令中的类型是指存储器地址变化的方式。也就是说,每加载或者存储完一个寄存器后,存储器的地址需要自动变化,如何变化则由指令助记符后面所跟的类型确定。类型可以是下列情况之一: IA 每次数据传送后存储器的地址加1; IB 每次数据传送前存储器的地址加1; DA 每次数据传送后存储器的地址减1; DB 每次数据传送前存储器的地址减1; FD 满递减堆栈; ED 空递减堆栈; FA 满递增堆栈; EA 空递增堆栈。 例如: STMFD R13!,{R0-R12,R14} ;寄存器进栈 … LDMFD R13!,{R0-R12,PC} ;寄存器出栈,返回 利用STM指令把存储在LR寄存器中的当前PC值保存到存储器中的时候,同时还保存了CPSR寄存器的值。在用LDM指令重新装载 PC寄存器的时候,除非设计者在指令中写上相应的符号,否则不会恢复CPSR的值。所写的符号是在寄存器列表后跟随一个“^”符号。 例如: STMFD R13!,{R0-R12,R14} ;寄存器进栈 … LDMFD R13!,{R0-R12,PC}^ ;寄存器出栈,返回,同时恢复CPSR (3)单一数据交换指令:SWP。 该指令完成在寄存器和存储器之间进行数据交换的功能,其句法如下: SWP{条件码}{B} Rd,Rm,[Rn] 若指令助记符中加上可选后缀B,则交换的是字节数据,否则交换的是字数据。 该指令的具体作用是数据从存储单元加裁到Rd寄存器中,Rm寄存器的内容存储到存储单元中,该存储单元的地址是Rn寄存器的值。 影响状态标志位类指令 CPSR寄存器是ARM9微处理器核中保存状态标志位的寄存器,其中N、V、C、Z标志是由指令执行结果确定的。能影响这些标志生成的指令或读/写CPSR寄存器的指令如下: (1)ADC,ADD,SBC,SUB,RSC和RSB指令; (2)AND,ORR,EOR和BIC指令; (3)MOV和MVN指令; 注:MOV和MVN是寄存器与寄存器间的传送指令。若R15是目的寄存器,则会修改程序计数器PC的值或标志。这一点可被用于子程序返回,方法是把链接寄存器R14的内容传送到R15中。 (4)MUL和MLA指令; (5)MRS和MSR指令。 注:MRS:只能完成CPSR寄存器和SPSR寄存器的读操作; MSR:只能完成CPSR寄存器和SPSR寄存器的写操作。 比较类指令 (1)CMP和CMN指令 CM
文档评论(0)