(第3章 ARM寻址方式与指令系统) 11 12节课件_第1页
(第3章 ARM寻址方式与指令系统) 11 12节课件_第2页
(第3章 ARM寻址方式与指令系统) 11 12节课件_第3页
(第3章 ARM寻址方式与指令系统) 11 12节课件_第4页
(第3章 ARM寻址方式与指令系统) 11 12节课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

六、bootloader外部中断非向量中断响应过程六、bootloader外部中断非向量中断响应过程1六、bootloader中断向量表0x00000018六、bootloader中断向量表0x000000182六、bootloaderIsrIRQ中断服务器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};将r8,r9入栈ldr r9,=I_ISPR;中断寄存器地址=r9ldr r9,[r9] ;读出中断寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部标号movsr9,r9,lsr#1;LSR逻辑右移bcs %F1;%F向前搜索局部标号判断是否把置位Cadd r8,r8,#4 ;根据I_ISPR的值b %B0 ;判断该中断在普通中断向量表中的偏移量,存入R8;%B向后搜索局部标号1;局部标号ldr r9,=HandleADC ;HandleADC为普通中断向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=实际的中断向量地址ldr r9,[r9] ;取出中断向量的值,即服务程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳转到普通中断服务程序,开始执行六、bootloaderIsrIRQ中断服务器程序Is3六、bootloader普通中断向量分配空间外部中断包括的26种普通中断的向量空间分配HandleADC # 4HandleRTC # 4

HandleUTXD1 # 4

HandleUTXD0 # 4

......

HandleEINT3 # 4

HandleEINT2 # 4

HandleEINT1 # 4

HandleEINT0 # 4;六、bootloader普通中断向量分配空间外部中断包43.2指令格式一、ARM汇编语言组成1、汇编语言指令组成机器指令:ARM指令和Thumb指令;伪指令:宏指令:2、指令含义机器指令:能够被处理器直接执行的指令伪指令:源程序汇编期间,由汇编程序执行的指令(定义段,定义变量等)宏指令:

是一段独立的程序代码,汇编时用宏体替代宏指令3.2指令格式一、ARM汇编语言组成1、汇编语言指令组成53.2指令格式二、编码格式1、ARM汇编指令格式(助记符格式)ARM汇编指令:ADDEQSR0,R1,R2;

该指令的编码格式为:

31~2827~2524~212019~1615~1211~~~~~~~~~~0cond

opcodeSRnRdop2000000101001000100000000000000103.2指令格式二、编码格式1、ARM汇编指令格式(助记63.2指令格式二、编码格式<opcode>{<cond>}{S}<Rd>,<Rn>,<op2>

其中:<>是必选项{}是可选项<opcode>操作码,如ADD表示算术加操作指令;{<cond>}决定指令执行的条件域;{S}决定指令执行是否影响CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一个操作数,为寄存器;<op2>第二个操作数。2、例如指令ADDEQSR1,R2,#5

3.2指令格式二、编码格式<opcode7二、编码格式3、条件域<cond>几乎所有的ARM指令都可以根据当前程序状态寄存器CPSR中标志位的值,有条件地执行。ARM指令的条件域<cond>有16种类型。

二、编码格式3、条件域<cond>几乎所有的ARM指令都8二、编码格式3、条件域<cond>二、编码格式3、条件域<cond>9二、编码格式3、条件域<cond>二、编码格式3、条件域<cond>10三、寻址方式

9种:立即数寻址寄存器寻址寄存器移位寻址寄存器间接寻址

基址变址寻址相对寻址

多寄存器寻址

块拷贝寻址

堆栈寻址

三、寻址方式9种:11三、寻址方式1、立即数寻址在立即数寻址中,操作数包含在指令中。称此种操作数为立即数。#后接0x或&表示十六进制数或0b表示二进制数或0d或缺省表示十进制数=〉表示立即数。例:

ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作数5,0x55就是立即数,立即数在指令中要以“#”为前缀,后面跟实际数值。三、寻址方式1、立即数寻址在立即数寻址中,操作数包12三、寻址方式2、寄存器寻址所有操作数都为寄存器例:

ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、寻址方式2、寄存器寻址所有操作数都为寄存器13三、寻址方式3、寄存器移位寻址操作数由寄存器的数值做相应移位而得到。移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。例:

ADDR0,R1,R2,ROR#5;R0<=R1+R2循环右移5位

MOVR0,R1,LSLR3;R0<=R1逻辑左移R3位移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。三、寻址方式3、寄存器移位寻址操作数由寄存器的数值14ARM指令集的5种位移操作LSL逻辑左移:Rx,LSL<op1>LSR逻辑右移:Rx,LSR<op1>ASR算术右移:Rx,ASR<op1>ROR循环右移:Rx,ROR<op1>RRX带扩展的循环右移:Rx,RRXARM指令集的5种位移操作LSL逻辑左移:Rx,LSL<15三、寻址方式4、寄存器间接寻址寄存器中的值为操作数的物理地址,而实际的操作数存放在此地址存储器中。例:

STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、寻址方式4、寄存器间接寻址寄存器中的值为操作数16三、寻址方式5、基址变址寻址将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。例:

LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、寻址方式5、基址变址寻址将寄存器(称为基址寄存17三、寻址方式6、相对寻址相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。例:

BEQprocess1……process1……三、寻址方式6、相对寻址相对寻址同基址变址寻址相似18三、寻址方式7、多寄存器寻址在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“-”连接,否则用“,”分隔。例:

LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。三、寻址方式7、多寄存器寻址在多寄存器寻址方式中,19三、寻址方式8、块拷贝寻址块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。例:

LDRR0,=0x40003000

LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以R1的值为起始地址的存储单元中。实际上是多寄存器寻址的组合。三、寻址方式8、块拷贝寻址块拷贝寻址可实现连续地址20三、寻址方式9、堆栈寻址堆栈:按照“后进先出”(“先进后出”)的原则进行数据存储的特定区域。使用专门的寄存器(堆栈指针SP(R13))指向堆栈栈顶。堆栈种类:向上增长:数据进栈,堆栈指针递增.向下增长:数据进栈,堆栈指针递减.满堆栈:堆栈指针指向最后压入堆栈的有效数据。空堆栈:堆栈指针指向下一个要压入数据的地址。三、寻址方式9、堆栈寻址堆栈:按照“后进先出”(“21三、寻址方式9、堆栈寻址满递增FA:数据进栈,地址向上增长,堆栈指针指向含有有效数据的最高地址.满递减FD:数据进栈,地址向下递减,堆栈指针指向含有有效数据的最低地址.空递增EA:数据进栈,地址向上增长,堆栈指针指向含有有效数据的最高地址的下一个字地址(空地址).空递减ED:数据进栈,地址向下增长,堆栈指针指向含有有效数据的最地地址的下一个字地址(空地址).三、寻址方式9、堆栈寻址满递增FA:数据进栈,地址22三、寻址方式9、堆栈寻址堆栈寻址用于数据栈与寄存器组之间批量数据传输。当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。例:

STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一条指令,将R0-R4中的数据压入堆栈,R13为堆栈指针;第二条指令,将数据出栈,恢复R0-R4原先的值。三、寻址方式9、堆栈寻址堆栈寻址用于数据栈与寄存器233.3ARM指令集6种类型(53种主要助记符):数据处理指令(22种主要助记符)跳转指令(4种主要助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令

(2种主要助记符)3.3ARM指令集6种类型(53种主要助记符):24一、数据处理指令1.MOV数据传送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即数。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、数据处理指令1.MOV数据传送指令25一、数据处理指令2.MVN数据取反传送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反,

Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即数。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、数据处理指令2.MVN数据取反传送指令26一、数据处理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即数。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、数据处理指令3.ADD加法指令27一、数据处理指令4.ADC带进位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。该指令用于实现超过32位的数的加法。例如:第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果存放在(R1,R0)中。64位的加法可由以下语句实现:ADDSR0,R2,R4 ;低32位相加,S表示结果影响条件标志位的值ADCR1,R3,R5 ;高32位相加一、数据处理指令4.ADC带进位加法指令28一、数据处理指令5.SUB减法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即数。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、数据处理指令5.SUB减法指令29一、数据处理指令6.RSB反向减法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒换了两操作数的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、数据处理指令6.RSB反向减法指令30一、数据处理指令7.SBC带借位减法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解释op2可以是寄存器、被移位的寄存器或立即数。SUB和SBC生成进位标志的方式不同于常规,如果需要借位则清除进位标志,所以指令要对进位标志进行一个非操作。应用:超过32位的减法运算例如:两个64位数相减第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果存放在(R1,R0)中。64位的减法(第一个操作数减去第二个操作数)可由以下语句实现:程序SUBSR0,R2,R4; 低32位相减,S表示结果影响条件标志位的值SBCR1,R3,R5; 高32位相减一、数据处理指令7.SBC带借位减法指令31一、数据处理指令8.RSC带借位的反向减法指令格式:RSC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SBC指令,但倒换了两操作数的前后位置,即Rd=op2-Rn-!carry。例如:前提条件与SBC例子相同,操作数1-操作数2的实现语句需改为:SUBSR0,R2,R4; 低32位相减,S表示结果影响寄存器CPSR的值RSCR1,R5,R3; 高32位相减一、数据处理指令8.RSC带借位的反向减法指令32一、数据处理指令9.MUL32位乘法指令格式:MUL{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn×op2该指令根据S标志,决定操作是否影响CPSR的值;其中op2必须为寄存器。Rn和op2的值为32位的有符号数或无符号数。例如:MULSR0,R1,R2 ;R0=R1×R2,结果影响寄存器CPSR的N,Z位一、数据处理指令9.MUL32位乘法指令33一、数据处理指令10.MLA32位乘加指令格式:MLA{<cond>}{S}<Rd>,<Rn>,<op2>,<op3>;功能:Rd=Rn×op2+op3op2和op3必须为寄存器。Rn、op2和op3的值为32位的有符号数或无符号数。例如:MLAR0,R1,R2,R3 ;R0=R1×R2+R3一、数据处理指令10.MLA32位乘加指令3411.SMULL64位有符号数乘法指令格式:

SMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2Rdh、Rdl和op2均为寄存器。Rn和op2的值为32位的有符号数。例如:SMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位一、数据处理指令11.SMULL64位有符号数乘法指令一、数据处理指令3512.SMLAL64位有符号数乘加指令格式:

SMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:RdhRdl=Rn×op2+RdhRdlRdh、Rdl和op2均为寄存器。Rn和op2的值为32位的有符号数,RdhRdl的值为64位的加数。例如:SMLALR0,R1,R2,R3;R0=R2×R3的低32位+R0;R1=R2×R3的高32位+R1一、数据处理指令12.SMLAL64位有符号数乘加指令一、数据处理指令3613.UMULL64位无符号数乘法指令格式:

UMULL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMULL指令,但指令中Rn和op2的值为32位的无符号数。例如:UMULLR0,R1,R2,R3;R0=R2×R3的低32位;R1=R2×R3的高32位其中R2,R3的值为无符号数一、数据处理指令13.UMULL64位无符号数乘法指令一、数据处理指令3714.UMLAL64位无符号数乘加指令格式:

UMLAL{<cond>}{S}<Rdl>,<Rdh>,<Rn>,<op2>;功能:同SMLAL指令,但指令中Rn,op2的值为32位的无符号数,RdhRdl的值为64位无符号数。例如:UMLALR0,R1,R2,R3R2XR3+(R1,R0)R1,R0一、数据处理指令14.UMLAL64位无符号数乘加指令一、数据处理指令38六、bootloader外部中断非向量中断响应过程六、bootloader外部中断非向量中断响应过程39六、bootloader中断向量表0x00000018六、bootloader中断向量表0x0000001840六、bootloaderIsrIRQ中断服务器程序IsrIRQ sub sp,sp,#4;保留PCstmfd sp!,{r8-r9};将r8,r9入栈ldr r9,=I_ISPR;中断寄存器地址=r9ldr r9,[r9] ;读出中断寄存器I_ISPR的值,存入R9中mov r8,#0x00 ;局部标号movsr9,r9,lsr#1;LSR逻辑右移bcs %F1;%F向前搜索局部标号判断是否把置位Cadd r8,r8,#4 ;根据I_ISPR的值b %B0 ;判断该中断在普通中断向量表中的偏移量,存入R8;%B向后搜索局部标号1;局部标号ldr r9,=HandleADC ;HandleADC为普通中断向量表的起始地址,add r9,r9,r8 ;起始地址+偏移地址=实际的中断向量地址ldr r9,[r9] ;取出中断向量的值,即服务程序的地址str r9,[sp,#8]ldmfdsp!,{r8-r9,pc} ;跳转到普通中断服务程序,开始执行六、bootloaderIsrIRQ中断服务器程序Is41六、bootloader普通中断向量分配空间外部中断包括的26种普通中断的向量空间分配HandleADC # 4HandleRTC # 4

HandleUTXD1 # 4

HandleUTXD0 # 4

......

HandleEINT3 # 4

HandleEINT2 # 4

HandleEINT1 # 4

HandleEINT0 # 4;六、bootloader普通中断向量分配空间外部中断包423.2指令格式一、ARM汇编语言组成1、汇编语言指令组成机器指令:ARM指令和Thumb指令;伪指令:宏指令:2、指令含义机器指令:能够被处理器直接执行的指令伪指令:源程序汇编期间,由汇编程序执行的指令(定义段,定义变量等)宏指令:

是一段独立的程序代码,汇编时用宏体替代宏指令3.2指令格式一、ARM汇编语言组成1、汇编语言指令组成433.2指令格式二、编码格式1、ARM汇编指令格式(助记符格式)ARM汇编指令:ADDEQSR0,R1,R2;

该指令的编码格式为:

31~2827~2524~212019~1615~1211~~~~~~~~~~0cond

opcodeSRnRdop2000000101001000100000000000000103.2指令格式二、编码格式1、ARM汇编指令格式(助记443.2指令格式二、编码格式<opcode>{<cond>}{S}<Rd>,<Rn>,<op2>

其中:<>是必选项{}是可选项<opcode>操作码,如ADD表示算术加操作指令;{<cond>}决定指令执行的条件域;{S}决定指令执行是否影响CPSR寄存器的值;<Rd>目的寄存器;<Rn>第一个操作数,为寄存器;<op2>第二个操作数。2、例如指令ADDEQSR1,R2,#5

3.2指令格式二、编码格式<opcode45二、编码格式3、条件域<cond>几乎所有的ARM指令都可以根据当前程序状态寄存器CPSR中标志位的值,有条件地执行。ARM指令的条件域<cond>有16种类型。

二、编码格式3、条件域<cond>几乎所有的ARM指令都46二、编码格式3、条件域<cond>二、编码格式3、条件域<cond>47二、编码格式3、条件域<cond>二、编码格式3、条件域<cond>48三、寻址方式

9种:立即数寻址寄存器寻址寄存器移位寻址寄存器间接寻址

基址变址寻址相对寻址

多寄存器寻址

块拷贝寻址

堆栈寻址

三、寻址方式9种:49三、寻址方式1、立即数寻址在立即数寻址中,操作数包含在指令中。称此种操作数为立即数。#后接0x或&表示十六进制数或0b表示二进制数或0d或缺省表示十进制数=〉表示立即数。例:

ADDR0,R1,#5; R0=R1+5MOVR0,#0x55; R0=0x55其中:操作数5,0x55就是立即数,立即数在指令中要以“#”为前缀,后面跟实际数值。三、寻址方式1、立即数寻址在立即数寻址中,操作数包50三、寻址方式2、寄存器寻址所有操作数都为寄存器例:

ADDR0,R1,R2 ; R0=R1+R2MOVR0,R1 ; R0=R1三、寻址方式2、寄存器寻址所有操作数都为寄存器51三、寻址方式3、寄存器移位寻址操作数由寄存器的数值做相应移位而得到。移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。例:

ADDR0,R1,R2,ROR#5;R0<=R1+R2循环右移5位

MOVR0,R1,LSLR3;R0<=R1逻辑左移R3位移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。三、寻址方式3、寄存器移位寻址操作数由寄存器的数值52ARM指令集的5种位移操作LSL逻辑左移:Rx,LSL<op1>LSR逻辑右移:Rx,LSR<op1>ASR算术右移:Rx,ASR<op1>ROR循环右移:Rx,ROR<op1>RRX带扩展的循环右移:Rx,RRXARM指令集的5种位移操作LSL逻辑左移:Rx,LSL<53三、寻址方式4、寄存器间接寻址寄存器中的值为操作数的物理地址,而实际的操作数存放在此地址存储器中。例:

STRR0,[R1] ; [R1]=R0LDRR0,[R1] ; R0=[R1]三、寻址方式4、寄存器间接寻址寄存器中的值为操作数54三、寻址方式5、基址变址寻址将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。例:

LDRR0,[R1,#5]; R0=[R1+5]LDRR0,[R1,R2] ; R0=[R1+R2]三、寻址方式5、基址变址寻址将寄存器(称为基址寄存55三、寻址方式6、相对寻址相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。例:

BEQprocess1……process1……三、寻址方式6、相对寻址相对寻址同基址变址寻址相似56三、寻址方式7、多寄存器寻址在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“-”连接,否则用“,”分隔。例:

LDMIAR0,{R1-R5};R1=[R0];R2=[R0+4];R3=[R0+8] ;R4=[R0+12];R5=[R0+16]指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。三、寻址方式7、多寄存器寻址在多寄存器寻址方式中,57三、寻址方式8、块拷贝寻址块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。例:

LDRR0,=0x40003000

LDRR1,=0x40003200LDMIAR0,{R2-R6};STMIAR1,{R2-R6};第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以R1的值为起始地址的存储单元中。实际上是多寄存器寻址的组合。三、寻址方式8、块拷贝寻址块拷贝寻址可实现连续地址58三、寻址方式9、堆栈寻址堆栈:按照“后进先出”(“先进后出”)的原则进行数据存储的特定区域。使用专门的寄存器(堆栈指针SP(R13))指向堆栈栈顶。堆栈种类:向上增长:数据进栈,堆栈指针递增.向下增长:数据进栈,堆栈指针递减.满堆栈:堆栈指针指向最后压入堆栈的有效数据。空堆栈:堆栈指针指向下一个要压入数据的地址。三、寻址方式9、堆栈寻址堆栈:按照“后进先出”(“59三、寻址方式9、堆栈寻址满递增FA:数据进栈,地址向上增长,堆栈指针指向含有有效数据的最高地址.满递减FD:数据进栈,地址向下递减,堆栈指针指向含有有效数据的最低地址.空递增EA:数据进栈,地址向上增长,堆栈指针指向含有有效数据的最高地址的下一个字地址(空地址).空递减ED:数据进栈,地址向下增长,堆栈指针指向含有有效数据的最地地址的下一个字地址(空地址).三、寻址方式9、堆栈寻址满递增FA:数据进栈,地址60三、寻址方式9、堆栈寻址堆栈寻址用于数据栈与寄存器组之间批量数据传输。当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。例:

STMFDR13!,{R0,R1,R2,R3,R4};LDMFDR13!,{R0,R1,R2,R3,R4}第一条指令,将R0-R4中的数据压入堆栈,R13为堆栈指针;第二条指令,将数据出栈,恢复R0-R4原先的值。三、寻址方式9、堆栈寻址堆栈寻址用于数据栈与寄存器613.3ARM指令集6种类型(53种主要助记符):数据处理指令(22种主要助记符)跳转指令(4种主要助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令

(2种主要助记符)3.3ARM指令集6种类型(53种主要助记符):62一、数据处理指令1.MOV数据传送指令格式:MOV{<cond>}{S}<Rd>,<op1>;功能:Rd<=op1op1可以是寄存器、被移位的寄存器或立即数。例如:MOVR0,#5 ;R0=5MOVR0,R1 ;R0=R1MOVR0,R1,LSL#5 ;R0=R1左移5位一、数据处理指令1.MOV数据传送指令63一、数据处理指令2.MVN数据取反传送指令格式:MVN{<cond>}{S}<Rd>,<op1>;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反,

Rd<=!op1;op1可以是寄存器、被移位的寄存器或立即数。例如:MVNR0,#0 ;R0<=0xFFFFFFFF一、数据处理指令2.MVN数据取反传送指令64一、数据处理指令3.ADD加法指令格式:ADD{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2op2可以是寄存器,被移位的寄存器或立即数。例如:ADDR0,R1,#5 ;R0=R1+5ADDR0,R1,R2 ;R0=R1+R2ADDR0,R1,R2,LSL#5 ;R0=R1+R2左移5位一、数据处理指令3.ADD加法指令65一、数据处理指令4.ADC带进位加法指令格式:ADC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd<=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。该指令用于实现超过32位的数的加法。例如:第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果存放在(R1,R0)中。64位的加法可由以下语句实现:ADDSR0,R2,R4 ;低32位相加,S表示结果影响条件标志位的值ADCR1,R3,R5 ;高32位相加一、数据处理指令4.ADC带进位加法指令66一、数据处理指令5.SUB减法指令格式:SUB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2op2可以是寄存器、被移位的寄存器或立即数。例如:SUBR0,R1,#5 ;R0<=R1-5SUBR0,R1,R2 ;R0<=R1-R2SUBR0,R1,R2,LSL#5 ;R0<=R1-R2左移5位一、数据处理指令5.SUB减法指令67一、数据处理指令6.RSB反向减法指令格式:RSB{<cond>}{S}<Rd>,<Rn>,<op2>;功能:同SUB指令,但倒换了两操作数的前后位置,即Rd=op2-Rn。例如:RSBR0,R1,#5 ;R0=5-R1RSBR0,R1,R2 ;R0=R2-R1RSBR0,R1,R2,LSL#5 ;R0=R2左移5位-R1一、数据处理指令6.RSB反向减法指令68一、数据处理指令7.SBC带借位减法指令格式:SBC{<cond>}{S}<Rd>,<Rn>,<op2>;功能:Rd=Rn-op2-!carry解释op2可以是寄存器、被移位的寄存器或立即数。SUB和SBC生成进位标志的方式不同于常规,如果需要借位则清除进位标志,所以指令要对进位标志进行一个非操作。应用:超过32位的减法运算例如:两个64位数相减第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果存放在(R1,R0)中。64位的减法(第一个操作数减去第二个操作数)可由以下语句实现:程序SUBSR0,R2,R4; 低32

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论