嵌入式系统原理-第3章分析.ppt
文本预览下载声明
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
显示全部