版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、vARM9微处理器采用的是微处理器采用的是ARMv4版本的指令集版本的指令集架构,其指令集代码的格式如架构,其指令集代码的格式如: v32位的位的ARM指令集由指令集由14种基本指令类型组成。种基本指令类型组成。指令操作码中的指令操作码中的Cond子域是条件域,它表明子域是条件域,它表明ARM指令集中的所有指令是有条件执行的。指令集中的所有指令是有条件执行的。v指令执行的条件是根据指令执行的条件是根据CPSR寄存器中的状态标志寄存器中的状态标志位和指令的条件域确定,见下表:位和指令的条件域确定,见下表: 寄存器装载及存储类指令 v这类指令是最常用的指令之一。它们把数据从存这类指令是最常用的指令
2、之一。它们把数据从存储器单元中装载(读入)到微处理器核的寄存器储器单元中装载(读入)到微处理器核的寄存器(即(即R0R15)中,或者把微处理器核的寄存器)中,或者把微处理器核的寄存器中的数据存储(写入)到存储器单元中。中的数据存储(写入)到存储器单元中。 v(1)单一数据加载)单一数据加载/存储指令:存储指令:LDR/STRv 指令书写格式:指令书写格式:v (1)LDR/STR条件码条件码B Rd,Rn v (2)LDR/STR条件码条件码B Rd,Rn,Flexoffset ! v (3)LDR/STR条件码条件码B Rd,label v (4)LDR/STR条件码条件码B Rd,Rn,F
3、lexoffset v下面是几条下面是几条LDR/STR指令书写的示例:指令书写的示例:v LDR R2,R5 ;无偏移量,无偏移量,R2R5v LDREQ R5,R6,#28! v ;(若相等);(若相等)R5R6+28,R6R6+28v LDR R8,label v ;加载一个字到;加载一个字到R8,该字存于,该字存于label对应单元处对应单元处v STR R1,R3,# -6! ;R1R3,R3R3-6v STRB R0,R3,-R8 ASR #2 v ;R0的最低字节的最低字节R3-R8/4单元的低字节单元的低字节 v(2)多数据加载)多数据加载/存储指令:存储指令:LDM和和STM
4、。 v指令书写格式:指令书写格式:v LDM/STM条件码条件码类型类型 Rn!,寄存器列表,寄存器列表v 指令中的类型是指存储器地址变化的方式。也就是说,每加载或者存指令中的类型是指存储器地址变化的方式。也就是说,每加载或者存储完一个寄存器后,存储器的地址需要自动变化,如何变化则由指令储完一个寄存器后,存储器的地址需要自动变化,如何变化则由指令助记符后面所跟的类型确定。类型可以是下列情况之一:助记符后面所跟的类型确定。类型可以是下列情况之一:v IA 每次数据传送后存储器的地址加每次数据传送后存储器的地址加1;v IB 每次数据传送前存储器的地址加每次数据传送前存储器的地址加1;v DA 每
5、次数据传送后存储器的地址减每次数据传送后存储器的地址减1;v DB 每次数据传送前存储器的地址减每次数据传送前存储器的地址减1;v FD 满递减堆栈;满递减堆栈;v ED 空递减堆栈;空递减堆栈;v FA 满递增堆栈;满递增堆栈;v EA 空递增堆栈。空递增堆栈。 v例如:例如:v STMFD R13!,!,R0-R12,R14 ;寄存器进栈;寄存器进栈v v LDMFD R13!,!,R0-R12,PC ;寄存器出栈,返回;寄存器出栈,返回v 利用利用STM指令把存储在指令把存储在LR寄存器中的当前寄存器中的当前PC值保存到存储器中的值保存到存储器中的时候,同时还保存了时候,同时还保存了CP
6、SR寄存器的值。在用寄存器的值。在用LDM指令重新装载指令重新装载 PC寄存器的时候,除非设计者在指令中写上相应的符号,否则不会恢复寄存器的时候,除非设计者在指令中写上相应的符号,否则不会恢复CPSR的值。所写的符号是在寄存器列表后跟随一个的值。所写的符号是在寄存器列表后跟随一个“”符号。符号。v 例如:例如:v STMFD R13!,!,R0-R12,R14 ;寄存器进栈;寄存器进栈v v LDMFD R13!,!,R0-R12,PC ;寄存器出栈,返回,;寄存器出栈,返回,同时恢复同时恢复CPSR v (3)单一数据交换指令:)单一数据交换指令:SWP。v 该指令完成在寄存器和存储器之间进
7、行数据交换该指令完成在寄存器和存储器之间进行数据交换的功能,其句法如下:的功能,其句法如下:v SWP条件码条件码B Rd,Rm,Rn v 若指令助记符中加上可选后缀若指令助记符中加上可选后缀B,则交换的是字,则交换的是字节数据,否则交换的是字数据。节数据,否则交换的是字数据。v 该指令的具体作用是数据从存储单元加裁到该指令的具体作用是数据从存储单元加裁到Rd寄存器中,寄存器中,Rm寄存器的内容存储到存储单元中,寄存器的内容存储到存储单元中,该存储单元的地址是该存储单元的地址是Rn寄存器的值。寄存器的值。 影响状态标志位类指令 vCPSR寄存器是寄存器是ARM9微处理器核中保存状态标微处理器核
8、中保存状态标志位的寄存器,其中志位的寄存器,其中N、V、C、Z标志是由指令标志是由指令执行结果确定的。能影响这些标志生成的指令或执行结果确定的。能影响这些标志生成的指令或读读/写写CPSR寄存器的指令如下:寄存器的指令如下:v (1)ADC,ADD,SBC,SUB,RSC和和RSB指令;指令;v (2)AND,ORR,EOR和和BIC指令;指令;v (3)MOV和和MVN指令;指令;注:注:MOV和和MVN是是寄存器与寄存器间的传送指令。若寄存器与寄存器间的传送指令。若R15是目的寄存是目的寄存器,则会修改程序计数器器,则会修改程序计数器PC的值或标志。这一点可被用于子程序返的值或标志。这一点
9、可被用于子程序返回,方法是把链接寄存器回,方法是把链接寄存器R14的内容传送到的内容传送到R15中。中。v (4)MUL和和MLA指令;指令;v (5)MRS和和MSR指令。指令。注:注:MRS:只能完成:只能完成CPSR寄存器和寄存器和SPSR寄存器的读操作;寄存器的读操作; MSR:只能完成:只能完成CPSR寄存器和寄存器和SPSR寄存器的写操作。寄存器的写操作。 v(1)CMP和和CMN指令指令 CMP条件码条件码 Op1,Op2 该条指令的功能如下该条指令的功能如下:状态位:状态位 = Op1 - Op2的结果的结果。 CMN:与取负的数:与取负的数比较指令比较指令 CMN条件码条件码
10、 Op1,Op2 该条指令的功能如下该条指令的功能如下:状态位:状态位 = Op1 -(- Op2)的结果)的结果。 v(2)TST和和TEQ指令指令 TST条件码条件码 Op1,Op2 该条指令的功能如下该条指令的功能如下:状态位:状态位 = Op1 AND Op2的结果的结果。 TEQ条件码条件码 Op1,Op2 该条指令的功能如下该条指令的功能如下:状态位:状态位 = Op1 EOR Op2的结果的结果。 v(1)B和和BL B:分枝指令,其句法是:分枝指令,其句法是: B条件码条件码 destadd B指令是最简单的分枝指令。指令是最简单的分枝指令。ARM9微处理器一旦遇到一个微处理器
11、一旦遇到一个B指令,指令,将立即跳转到指令中给定的目的地址处,从那里继续执行。将立即跳转到指令中给定的目的地址处,从那里继续执行。 BL:带链接的分枝指令,其句法是:带链接的分枝指令,其句法是: BL条件码条件码 destadd BL指令指令是一个需要返回的分枝指令。该分枝指令在分枝之前是一个需要返回的分枝指令。该分枝指令在分枝之前,R14寄存器(即寄存器(即LR寄存器)中会装载上寄存器)中会装载上R15寄存器(即寄存器(即PC寄存器)寄存器)的内的内容。若要从分枝处返回发生转移的地方,可以通过重新把容。若要从分枝处返回发生转移的地方,可以通过重新把R14寄存寄存器的内容装载到器的内容装载到R
12、15 寄存器中来实现,寄存器中来实现,ARM微处理器返回到这个分微处理器返回到这个分枝指令之后的第一条指令处继续执行。枝指令之后的第一条指令处继续执行。 vSWI:软件中断指令,:软件中断指令,SWI是是Software Interrupt的缩写。其句法是:的缩写。其句法是: SWI条件码条件码 destcoad v上述句法中上述句法中destcoad是一个是一个24位的编号,即软位的编号,即软件中断号。件中断号。SWI指令会引起指令会引起SWI异常,使得微异常,使得微处理器的工作模式变换为管理模式,处理器的工作模式变换为管理模式,CPSR将被将被保存到管理模式的保存到管理模式的SPSR中,指
13、令执行流水被阻中,指令执行流水被阻塞,并转移到塞,并转移到SWI异常向量处。该指令不影响条异常向量处。该指令不影响条件码标志。件码标志。vSWI指令主要是为指令主要是为操作系统提供的。操作系统提供的。 v伪指令不是目标系统能够执行的指令,而是汇编伪指令不是目标系统能够执行的指令,而是汇编器采用的,用来指示如何进行汇编的符号,这种器采用的,用来指示如何进行汇编的符号,这种符号在汇编时,汇编器会把它汇编成一条或几条符号在汇编时,汇编器会把它汇编成一条或几条正真的汇编指令。正真的汇编指令。 v几种主要的伪指令:几种主要的伪指令:v(1)ADR 将程序相对偏移或寄存器相对偏移地址加载到寄存器中将程序相
14、对偏移或寄存器相对偏移地址加载到寄存器中 v(2)ADRL 该伪指令是加载长地址,功能类似如该伪指令是加载长地址,功能类似如ADR伪指令伪指令 v(3)LDR 该伪指令作用是把一个该伪指令作用是把一个32位常量或常量表达式加载到寄位常量或常量表达式加载到寄存器中。存器中。 v嵌入式系统发展到今天,程序的运行效率及存储嵌入式系统发展到今天,程序的运行效率及存储容量已不是嵌入式系统设计时所需考虑的主要问容量已不是嵌入式系统设计时所需考虑的主要问题。若只是关心嵌入式系统所具有的应用功能,题。若只是关心嵌入式系统所具有的应用功能,那么,在设计中,采用高级编程语言(例如那么,在设计中,采用高级编程语言(
15、例如C语语言等)编写程序更合适,它隐藏了微处理器执行言等)编写程序更合适,它隐藏了微处理器执行指令的许多细节,设计时相对方便。指令的许多细节,设计时相对方便。 v但是,如果嵌入式系统设计者希望对嵌入式系统但是,如果嵌入式系统设计者希望对嵌入式系统有更深层次的了解,希望能完成系统启动程序的有更深层次的了解,希望能完成系统启动程序的编写、操作系统移植等任务,那么,掌握汇编语编写、操作系统移植等任务,那么,掌握汇编语言程序设计是非常必要的。言程序设计是非常必要的。 汇编编程规则 v利用利用ARM9汇编指令进行程序设计时,程序中的汇编指令进行程序设计时,程序中的每一语句行的格式为:每一语句行的格式为:
16、 标号标号 指令指令 “或或” 指示符指示符 “或或” 伪指令伪指令 ;注解;注解。v指示符是汇编器定义的,也是用来指示汇编器如指示符是汇编器定义的,也是用来指示汇编器如何进行汇编的符号,这些符号仅指示汇编器如何何进行汇编的符号,这些符号仅指示汇编器如何进行汇编和连接,不会被汇编成一条正真的汇编进行汇编和连接,不会被汇编成一条正真的汇编指令。指令。v几个主要指示符:几个主要指示符:(1)AREA 指示汇编器汇编一段新的代码段或数据段的指示符;指示汇编器汇编一段新的代码段或数据段的指示符;(2)ENTRY 指示汇编器把其后的首条指令作为程序入口的指示符,指示汇编器把其后的首条指令作为程序入口的指
17、示符,一个源文件中只能有一个一个源文件中只能有一个ENTRY指示符;指示符;(3)END 表示源程序结束的指示符;表示源程序结束的指示符;(4)IMPORT 告诉汇编器某个变量名或标号在当前程序段中未曾定义告诉汇编器某个变量名或标号在当前程序段中未曾定义的指示符,这个变量名或标号由连接器进行定位;的指示符,这个变量名或标号由连接器进行定位;(5)EXPORT 指示由连接器在目标和库文件中使用的符号的指示符;指示由连接器在目标和库文件中使用的符号的指示符;(6)CODE32 指示汇编器将随后的指令作为指示汇编器将随后的指令作为32位位ARM指令进行汇编指令进行汇编的指示符;的指示符;(7)COD
18、E16 指示汇编器将随后的指令作为指示汇编器将随后的指令作为16位位Thumb指令进行指令进行汇编的指示符;汇编的指示符;(8)GET 指示包含一个文件的指示符,汇编器在指示包含一个文件的指示符,汇编器在GET处汇编包含处汇编包含的文件;的文件;(9)DATA 指示一个标号是代码段中数据区域的标号,该符号后是通指示一个标号是代码段中数据区域的标号,该符号后是通常是伪指令常是伪指令DCB或或DCD。 汇编指令的特点 vARM9的汇编指令相对于其他微处理器的汇编指的汇编指令相对于其他微处理器的汇编指令来说,具有许多特点:令来说,具有许多特点:v(1)指令的条件执行:)指令的条件执行:32位位ARM
19、指令集中的指令集中的所有指令都是条件执行的指令。需要条件执行的所有指令都是条件执行的指令。需要条件执行的指令只需要使用条件后缀,就可以实现条件执行。指令只需要使用条件后缀,就可以实现条件执行。 例例1: CMP R0,R1 ;比较比较R0和和R1的值,结果用于更新标志的值,结果用于更新标志 ADDEQS R0,R1,R2 ;如标志如标志Z =1,则加法指令执行,并更新标志,则加法指令执行,并更新标志 v(2)多种形式的传送类指令)多种形式的传送类指令v(3)多寄存器加载)多寄存器加载/存储指令存储指令 v(4)映射存储的指示符:)映射存储的指示符:ARM汇编器可以使用汇编器可以使用MAP和和“
20、#”指示符,来描述一个结构体,指示指示符,来描述一个结构体,指示符符MAP和和“#”主要用于完成结构体的定义,并主要用于完成结构体的定义,并不一定具体确定其内存空间地址。不一定具体确定其内存空间地址。v指示符指示符MAP说明结构体的基地址,指示符说明结构体的基地址,指示符“#”定义数据项的标号并说明所需空间。定义数据项的标号并说明所需空间。 例如:例如: MAP 0 x00001000 element1 # 4 ;element1占用占用4字节字节 element2 # 4 ;element2占用占用4字节字节 element3 # 8 ;element3占用占用8字节字节 element4
21、# 8 ;element4占用占用8字节字节 element5 # 256 ;element5占用占用256字节字节 v(5)程序中的宏定义:在汇编程序设计时,宏)程序中的宏定义:在汇编程序设计时,宏定义的使用是为了提高程序的可读性、以及可维定义的使用是为了提高程序的可读性、以及可维护性。护性。ARM汇编器提供的宏类似于标准汇编器提供的宏类似于标准C语言中语言中的的#define,其功能是在程序源代码中进行字符,其功能是在程序源代码中进行字符替代。替代。 vARM汇编器把指示符汇编器把指示符MACRO作为宏定义的开作为宏定义的开始,指示符始,指示符MEND作为宏定义的结束,并且可以作为宏定义的
22、结束,并且可以带有参数。例如:带有参数。例如: MACRO $ aa example $ bb,$cc,$dd $ aa CMP $ cc,#0 B$ dd $ bb MEND v系统引导程序系统引导程序(Bootloader)是目标)是目标系统硬件上电或复位后执系统硬件上电或复位后执行的第一段程序代码,它行的第一段程序代码,它通常被安排在系统复位异通常被安排在系统复位异常向量地址处。常向量地址处。v系统引导程序是依赖于具系统引导程序是依赖于具体硬件环境的,除了依赖体硬件环境的,除了依赖于微处理器的体系结构外,于微处理器的体系结构外,还依赖于具体的板级硬件还依赖于具体的板级硬件配置。配置。 v
23、通常系统引导程序需完成以下功能:通常系统引导程序需完成以下功能:v 设置异常向量表(即在异常向量地址处设置相关分枝指令)设置异常向量表(即在异常向量地址处设置相关分枝指令)v 关看门狗定时器,关中断。关看门狗定时器,关中断。v 有时需要设置系统微处理器的速度和时钟频率。有时需要设置系统微处理器的速度和时钟频率。v 设置好堆栈指针。系统堆栈初始化取决于用户使用哪些异设置好堆栈指针。系统堆栈初始化取决于用户使用哪些异常,以及系统需要处理哪些错误类型。一般情况下,管理常,以及系统需要处理哪些错误类型。一般情况下,管理模式堆栈必须设置;若使用了模式堆栈必须设置;若使用了IRQ中断,则中断,则IRQ中断
24、堆中断堆栈必须设置。栈必须设置。v 如果系统应用程序是运行在用户模式下,可在系统引导程如果系统应用程序是运行在用户模式下,可在系统引导程序中将微处理器的工作模式改为用户模式并初始化用户模序中将微处理器的工作模式改为用户模式并初始化用户模式下的堆栈指针。式下的堆栈指针。v 若系统使用了若系统使用了DRAM或其他外设,需要设置相关寄存器,或其他外设,需要设置相关寄存器,以确定其刷新频率、总线宽度等信息。以确定其刷新频率、总线宽度等信息。v 初始化所需的存储器空间。初始化所需的存储器空间。v 跳转到跳转到C程序的入口点。程序的入口点。 v一个启动引导程序示例(文件名:一个启动引导程序示例(文件名:
25、Startup.s )v ;下面指令包含下面指令包含2440addr.s文件,该文件中定义了文件,该文件中定义了S3C2440内部寄内部寄存器地址对应的变量,如存器地址对应的变量,如WTCON、INTMSK等。等。v GET 2440addr.s v ; 某些某些ARM920T CPSR寄存器位的定义,定义了部分常量。寄存器位的定义,定义了部分常量。v USERMODE EQU0 x10v FIQMODE EQU0 x11v IRQMODE EQU0 x12v SVCMODE EQU0 x13v ABORTMODE EQU0 x17v UNDEFMODE EQU0 x1bv MODEMASK
26、EQU0 x1fv NOINT EQU0 xc0v I_Bit*0 x80v F_Bit*0 x40v;AREA指示汇编器汇编一段新的代码指示汇编器汇编一段新的代码AREA Init,CODE,READONLYv;IMPORT提供汇编器在当前汇编中未曾定义的提供汇编器在当前汇编中未曾定义的符号名。符号名。IMPORT _use_no_semihosting_swiIMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQv;下面下面ENTRY指明了程序的入口,在应用程序中指明了程序的入口
27、,在应用程序中有且只有一个程序入口。有且只有一个程序入口。ENTRYv;下面是异常向量表,第一条语句是复位异下面是异常向量表,第一条语句是复位异常对应的跳转指令。常对应的跳转指令。BColdReset;复位复位BEnter_UNDEF ;未定义指令错误未定义指令错误BEnter_SWI;软件中断软件中断BEnter_PABORT;预取指令错误预取指令错误BEnter_DABORT;数据存取错误数据存取错误B.;一个保留的中断向量一个保留的中断向量BIRQ_Handler;IRQHandlerBEnter_FIQ;FIQHandler v;涉及涉及IRQ异常的处理异常的处理EXPORT IRQ_
28、HandlerIRQ_HandlerIMPORT ISR_IrqHandlerSTMFDsp!, r0-r12, lrBLISR_IrqHandlerLDMFDsp!, r0-r12, lrSUBSpc, lr,#4 v;系统上电或复位后跳转到此处开始进行运行。系统上电或复位后跳转到此处开始进行运行。EXPORT ColdResetColdResetv;关看门狗定时器关看门狗定时器 LDR R0,=WTCONLDRR1,=0 x0STRR1,R0v;关所有中断关所有中断LDRR0,=INTMSKLDRR1,=0 xffffffffSTRR1,r0LDRR0,=INTSUBMSKLDRR1,=0 x7ff;关所有子中断源关所有子中断源STRR1,r0 v;初始化堆栈,使用了带链接的分枝指令,跳转到初始化堆栈,使用了带链接的分枝指令,跳转到堆栈指针设置子程序中堆栈指针设置子程序中BLInitStacksv;下面调转到下面调转到C语言的主函数处语言的主函数处IMPO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年软件开发源代码托管合同协议
- GB 175-2023《通 用硅酸盐水泥》变化
- 无伤运动-预防与康复的关键策略
- 房产中介:开启市场新篇章-破局竞争拥抱变革与机遇
- 期货投资:智慧资产配置-解读市场掌控风险增值收益
- 学科兴趣分享-分享学科兴趣与成果
- 智慧房产:团队协作之道-深化项目管理提升交付效率
- 2026七年级数学上册 字母表示数
- 科研技能教程单元课01onine数据库使用教程
- UX设计培训试题及答案
- 2026中国邮政储蓄银行广西区分行春季校园招聘备考题库及答案详解【历年真题】
- 山东省青岛市西海岸新区达标名校2026届中考数学最后一模试卷含解析
- 2025-2026学年四川省德阳市中考物理模拟试题(含答案解析)
- 《劳动创造美好生活(第二版)》课件 幸福不会从天而降
- (正式版)DB37∕T 4976-2025 《河湖生态产品价值核算技术规范》
- 【答案】《戏剧艺术概论》(中央戏剧学院)章节作业慕课答案
- 重度颅脑损伤的急救与护理
- 恒丰银行招聘真题及答案
- GB/T 11918.1-2025工业用插头、固定式或移动式插座和器具输入插座第1部分:通用要求
- 小区改造施工脚手架施工方案
- 事业单位A类综合应用能力试题答案
评论
0/150
提交评论