《2022年ARM培训讲义提纲.doc》由会员分享,可在线阅读,更多相关《2022年ARM培训讲义提纲.doc(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ARM培训讲义提纲单 位:西安电子科技大学 编 写: 何方勇 编写日期: 2005年7月1日 1. 绪言本次ARM培训主要使各位受训人员理解嵌入式操作系统的根本概念、软硬件构成框架、以及掌握与嵌入式操作系统相关的知识。随着通讯技术、电子技术、计算机技术、以及微电子技术的开展,片上系统(SOC)成为当今电子技术的一大主流;这就使得嵌入式开发技术成为整个业界的研究和开发的热点。我们明白当今世界通讯与信息技术开展的3大热点是:第三、四代挪动通讯技术、数字电视技术、以及汽车电子技术。在这几个热点技术的最终实现将被纳入系统的概念,其中嵌入式系统将在里面伴有重要的角色。2. 嵌入式操作系统嵌入式操作系统作
2、为一种新的系统,我们应该如何把握呢?以下我们将简要介绍一下嵌入式系统。2.1. 嵌入式操作系统的根本概念从字面上,我们能够从两方面理解嵌入式系统:嵌入式、系统。列举适当的例子说明嵌入式系统的应用:手持设备、大型通讯设备2.2. 嵌入式操作系统与常见的单片机、DSP系统的细微区别从系统的概念出发讲解:单片机、和DSP是没有系统概念的2.3. 嵌入式操作系统的软硬件平台开发1嵌入式操作系统的硬件构成:核心处理器、程序和数据存储器、总线系统、外围接口(设备)等;2嵌入式操作系统的软件构成:系统软件、API、底层驱动、应用程序等结合微机系统操作系统讲解3常见嵌入式操作系统:VxWorks、PSOS、L
3、INUX、WINCE、NUCLEUS等,各种操作系统的区别和优点及应用前景。2.4. 怎么样进展嵌入式系统设计嵌入式系统开发是本次培训的主要内容,那我们应该从以下方面入手:处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件开发平台、软件组成。1) 处理器:速度、IO 设计指标、处理器的软件支持、处理器调试方式、处理器提供商的信誉度;2) 硬件部件:硬件实现难度、开发周期、市场前景、供货情况3) 操作系统:产品的合适度、调试难度、代码构造、可开发潜力、移植可行性4) 编程语言:高级语言、低级语言5) 软件开发工具:系统调试功能如何、支持的库函数、开发商的软件支持3. 嵌入式处理器在以上的讲
4、义中我们简要提到了嵌入式开发的各方面的咨询题,接下来我们将从硬件开场讲解。在嵌入式系统中,主要以ARM芯片作为该系统的核心芯片。3.1. 嵌入式处理器简介ARM是Advanced RISC Machines的缩写,ARM公司于1990成立 ,ARM以低本钱、低功耗、高功能迅速占据了全球市场。其产品广泛应用到挪动通讯、消费电子、以及嵌入式市场。ARM公司不消费芯片,只是IP供给商,只做设计。常见ARM处理器系列有:ARM7系列、ARM9系列、ARM9E系列、ARM10系列、SecurCore SC100、Strong ARM、XScale。在此,我们主要讲解ARM7系列、ARM9系列:1) AR
5、M7系列:0.9MIPS/MHz3级流水、冯.诺依曼构造;其内核主要有ARM7TDMI和ARM720T;T:支持16位THUMB指令,D支持在片调试,M加强型乘法器,产生全64位结果,I:嵌入式ICE硬件提供片上断点和调试点支持2) ARM9系列:1.1MIPS/MHz5级流水、哈佛构造;其内核主要有ARM920T、ARM722T和ARM940T;3.2. 基于ARM内核的芯片扩展由于ARM公司只做IP,不消费详细的芯片;因而我们所使用的ARM芯片都是全世界其他硬件芯片厂商在通过ARM公司的受权,然后在此根底上进展硬件扩展,以满足不同领域的需求。ARM9系列是当今嵌入式系统应用的主流芯片内核技
6、术。全世界各大厂商都采纳ARM公司的IP来开发本人的ARM芯片,主要厂商有:三星、AD、TI、菲利普、Intel、CIRRUS LOGIC等。下面,我们以三星公司的ARM芯片S3C2410X为例来简要介绍基于ARM内核的芯片扩展。留意:ARM9系列是兼容ARM7系列的。3.3. ARM920T内核详解如今基于ARM920T内核的芯片逐步成为嵌入式系统芯片的主流,我们有必要详解其构造;这是进一步学习软件开发的根底。内核的构造图如下所示:下面我们将重点介绍ARM920T的协处理器CP15和内存治理单元MMU3.3.1. 协处理器CP153.3.2. 内存治理单元MMU4. 软件开发嵌入式系统的软件
7、开发包括:操作系统和应用程序开发两个方面。下面我们进一步讲解基于ARM芯片的汇编语言。4.1. ARM编程模型ARM常见版本是V4和V5,如今主要用的是V4,处理器工作状态:ARM,THUMB开关状态:进入THUMB状态、进入ARM状态存储器格式:大小端点格式指令长度:32位、16位数据类型:字,半字,字节操作方式:7种存放器:31个通用存放器和6个状态存放器中断:4.2. ARM根本寻址方式存放器寻址:立即寻址:存放器移位寻址:存放器间接寻址:变址寻址:多存放器寻址:堆栈寻址:块拷贝寻址:相对寻址:4.3. ARM指令集本章内容是详细讲解ARM指令集。4.3.1. ARM指令格式1 指令集格
8、式:ARM指令集格式如下表41所示: 表41:ARM指令集格式留意:某些指令码没有定义,但并不导致未定义指令圈套出现,例如一个乘法指令的第6位变为1。不应使用这些指令,由于它们的作用也许会由今后的ARM执行2 ARM指令集表:下面表42、表43列出了ARM指令集:表42:表42:ARM指令集表43:表43:ARM指令集3 条件码:在ARM状态下,所有指令都会依照CPSR条件码和指令条件域的状态被有条件地执行。该域(位31:28)决定了执行一条指令的环境。假如C、N、Z和V标志的状态满足该域的编码条件,指令就被执行,否则不予执行。存在着16个可能条件,每种由复加在指令经历符后的一个双字符后缀表示
9、。例如,Branch(B为汇编语言)变为BEQ表示“Branch if Equal”,意思是当Z标志被置位时执行Branch指令。实际上,表3-2中所列的15个不同的条件也许会用到,第16个(1111)保存,不能使用。在后缀缺省时,大多数指令的条件域被设置成“Always”(后缀AL)。这意味着不管CPSR的条件码是什么,指令永远被执行。下表44给出了条件码概况:表44:ARM指令中的条件码4.3.2. ARM指令集详解1分支与交换(BX指令,Branch和Exchange指令):该指令仅仅在条件为真时被执行,参见表44。该指令通过将一个通用存放器Rn的内容复制到程序计数器PC来执行一个分支。
10、这个分支会引起管道流,并会依照Rn指定的地址再入。该指令也同意交换指令集。当执行该指令时,Rn0的值决定了是否按照ARM指令依然THUMB指令对指令流进展解码。指令格式如以下图41所示:图41:BX指令格式指令循环时间:执行BX指令占用2S+1N周期(与BL一样),这里S和N分别代表连续(S周期)和非连续(N周期)。汇编程序语法:BX-分支和交换指令BX cond Rn ;cond为 双字母条件经历符(即条件码),见表44,而Rn 表示一个有效存放器(比方:R0)使用R15作操作数:假如将R15作操作数,该情况未定义。例:ADR R0, Into_THUMB + 1 ;产生分支目的地址,bit
11、0置位,进入THUMB状态BX R0 ;分支并改变到THUMB状,R15(PC):=R0CODE16 ;汇编作为THUMB指令的后续码Into_THUMBADR R5, Back_to_ARM ;产生分支目的到字陈列地址,bit0置低,变回到ARMBX R5 ;分支并变回到ARM状态,R15(PC):=R0ALIGN ;字陈列CODE32 ; 汇编作为ARM指令的后续码Back_to_ARM2分支与带链接分支(B、BL)该指令仅仅在条件为真时被执行,参见表44。该指令的编码如以下图42所示。图42:B、BL指令格式分支指令包含有一个有符号的2态补充24位偏移(相当于25根地址线+符号位,即+/
12、-32M字节)。这被左移两位,符号扩展至32位,并加到程序计数器PC。因而该指令能够指定+/-32M字节的分支。该指令偏置必须考虑预取操作,它会引起程序计数器PC超前当前指令2个字(8个字节)。超过+/-32M字节的分支必须使用偏置或事先装入存放器的绝对目的。在这种情况下,假如要求有带链接类型的分支操作,应当将PC值人工存入R14。链接位:带链接的分支(BL)将旧的PC写入当前存储空间的链接存放器(R14)。写入R14的值被调整到同意预取,并包含紧跟着“分支与链接指令”的指令地址。留意CPSR不保存PC值,R141:0总是清零。从带链接的分支返回,假如链接存放器仍然有效,可使用MOV PC,R
13、14;或假如链接存放器以被Rn存作堆栈指针,使用LDM Rn!,.PC。指令循环时间:分支和带链接分支指令占用2S+1N增加的周期(与BX一样),这里S和N分别代表连续(S周期)和内部(I周期)。汇编程序语法:中的内容任意,中的内容必须出现BLcond L 常用恳求带链接分支的指令方式。假如缺省,R14不受指令妨碍,即不将旧的PC值存入R14。cond如表44中所示的双字母助记符(条件码),假如缺省,默认为AL(Always)。目的单元,汇编程序计算偏移量。例here BAL here ;等待,指令汇编成0xEAFFFFFE B there ;等待,默认条件是“Always”CMP R1,#0
14、 ; R10?比拟BEQ fred ; 为零,则跳转;反之,接着下一个指令BL sub+ROM ; 跳转,调用子程序ADDS R1,#1 ; R1R11,设置CPSR标志BLCC sub ; C0, 调用子程序3数据处理:数据处理指令仅在条件为真时被执行,参见表44。该指令编码如以下图43所示。图43:数据处理指令该指令通过对一或两个操作数进展指定的算术或逻辑运算产生结果。第一个操作数总是一个存放器(Rn)。依照指令中L(即D25)位的值,第二个操作数可能是一个移位存放器(Rm)或一个8位循环立即数(Imm)。依照指令中S位的值,确定该指令的结果是否能够保护或更新CPSR中的条件码。确定的运算
15、(TST(OP1与OP2)、TEQ(OP1异或OP2)、CMP(OP1-OP2)、CMN(OP1+OP2)不将结果写入Rd。它们只用执行检测和设置结果中的条件码并总对S位置位。CPSR标志:数据处理运算可分为逻辑运算和算术运算,逻辑运算(AND、EOR、TST、TEQ、ORR、MOV、BIC、MVN)对操作数的所有相应位或产生结果的操作数执行逻辑运算。假如S位被置位(同时Rd不是R15,见下表),则CPSR中的V标志不受妨碍,C标志将被置位来执行barrel shifter(或当移位操作为LSL #0时保护),Z标志当且仅当结果全零时被置位,N被置为结果bit31的逻辑值。ARM数据处理指令见
16、下表45表45:数据处理指令算术运算(SUB、RSB、ADD、ADC、SBC、RSC、CMN)将每个操作数都看作是一个32位的整数(无符号或两个独立的符号,两种情况时一样的)。假如S位被置位(同时Rd不是R15),则CPSR中的V标志在结果的bit31出现溢出时被置位,假如操作数均为无符号数能够不理睬,但假如操作数为两个独立的有符号数则会发出错误提示,C标志会由于执行ALU的bit31被置位,Z标志当且仅当结果全零时被置位,N标志被置为结果bit31的值(假如认为操作数为两个独立的有符号数时指示结果为负)。移位:当第二个操作数被指定为移位存放器时,存放器的移位操作受指令中的移位域操纵。该域指示
17、要执行的移位类型(逻辑左移或右移、算术右移或循环右移)。存放器要挪动的值可包含在指令的立即域中,或者在另一个存放器(除了R15)。不同移位类型的编码如图4-4所示。 图4-4: ARM移位操作指定偏移量指令:当指令中指定了偏移量时,它包含了一个5位的区域,其赋值范围为031。逻辑左移(LSL)获取Rm的内容并将每一位挪动指定量到更有意义的位置。结果的最不重要位以零填充,Rm的最高位被丢弃,并不映射到结果中,除非当ALU运算处于逻辑状态(见上面)时,丢弃的最不重要的位变为shifter的进位输出,并可能锁定CPSR的S位。例如,LSL #5的妨碍如以下图45所示。图45:逻辑左移留意:LSL #
18、5是一个特例,这里shifter进位输出是CPSR C标志的过去值。Rm的内容被直截了当用作第二个操作数。逻辑右移(LSR)指令类似,但是Rm的内容被移到结果最不重要的位置。LSR #5的妨碍如以下图46所示。图46:逻辑右移此种移位使得Rm的第31位有零进位输出。与逻辑左移零一样,逻辑右移零是多余的,因而汇编程序将LSR #0(以及ASR #0和ROR #0)转换成LSL #0,并同意指定LSR #32。算术右移(ASR)与逻辑右移类似,不同的是高位被Rm的bit31填充而不是零。这保护了2个独立符号状态中的符号,例如,ASR #5如以下图47所示。图47:算术右移此种移位使得Rm的bit3
19、1重新用作进位输出,同时操作数2的每一位也等于Rm的bit31。因而依照Rm的bit31的值,结果为全1或全0。循环右移(ROR)操作是将逻辑右移操作中移出去的位再引入放置在结果的高端,在逻辑右移中常用零来填充高位。例如,ROR #5如以下图48所示。图48:循环右移期望给ROR #0的移位域方式用于对barrel shifter的特别功能,即带扩展的循环右移编码。这个循环右移是它使用附加的CPSR的C标志来提供一个要被移位的 33 位的数量到Rm内容的最高端,参见以下图49。 图49: 带扩展循环右移指定偏移量存放器只有Rs的最低端字节被用来确定偏移量。Rs能够是除R15外的任何存放器。假如
20、该字节为零,Rm未改变的内容将被当作第二操作数,同时旧的CPSR的 C标志值将会被作为shifter的进位输出。假如1到31位之间字节有值,移位结果将与指定移位指令的同一个值和移位操作匹配。假如字节中的值大于等于32,结果为上面所述移位的逻辑扩展:1. LSL 32结果为零,进位输出等于Rm的0位;2. LSL大于32结果为零,进位为零;3. LSR 32结果为零,进位输出等于Rm的31位;4. LSR大于32结果为零,进位为零;5. ASR大于等于32结果和进位等于Rm的31位;6. ROR 32结果等于Rm,进位等于Rm的31位;7. ROR n结果和进位与ROR n-32一样,这里n大于
21、32;因而不断从n中减去32,直到n值在131之间,见前面。留意:必须使带有操纵移位存放器指令的bit 7为零,该位为1会引起指令为乘或未定义。立即数循环:立即数循环域是一个4位无符号整数,指定对8位立即数进展移位操作。该值为扩展到32位的零,然后通过在循环域中的两倍值服从右移。这能够产生许多常数,例如2的幂。写入R15当Rd为除R15外的存放器时,CPSR中的条件码标志能够从前面所述的ALU标志更新。当Rd为R15同时指令中的S标志未置位时,操作结果被放入R15且CPSR不受妨碍。当Rd为R15且S标志置位时,操作结果被放入R15,对应于当前方式的SPSR被移入CPSR。这同意自动存储PC和
22、CPSR的状态改变。这种指令格式在用户方式下不能使用。用R15作操作数假如R15(PC)被用于数据处理指令中的一个操作数,可直截了当使用该存放器。PC值确实是指令地址、加上由于指令预取的8或12个字节。假如指令中指定了移位量,PC为前8个字节。假如用存放器指定移位量,则PC为前12个字节。TEQ、TST、CMP和CMN操作码:留意:TEQ、TST、CMP和CMN不写结果操作结果但置位CPSR中的标志位。即便助记符中没有指定,汇编程序也应当总将这些指令的S标志置位。不能使用TEQP指令,它是早期ARM处理器使用的TEQ指令:代替PSR转移操作。在ARM920T中TEQP的功能是:假如处理器工作在
23、特许方式就将SPSR_移入CPSR,假如在用户方式什么也不做。指令周期:数据处理指令增加的周期数如下表4-6:表4-6: 增加的循环时间注:S、N和I分别定义为顺序(S-周期)、非顺序(N-周期)和内部(I-周期)。汇编程序句法 MOV,MVN (单操作数指令).condS Rd, CMP,CMN,TEQ,TST (无结果指令).cond Rn, AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BICcondS Rd,Rn,这里: Rm, 或,cond 双字母条件助记符,见表44S 假如S表示(指CMP, CMN, TEQ, TST),置位条件码.Rd, Rn 和 Rm
24、 存放器号表达式 假如使用,汇编程序将会产生一个移位的立即8位域来匹配表达式,假如不用会出错 或 #expression, 或 RRX (带扩展右移1位).s ASL, LSL, LSR, ASR, ROR. (ASL与LSL意义一样,它们的汇编码一样)例:ADDEQ R2,R4,R5 ;假如Z标志置位,使R2=R4+R5TEQS R4,#3 ;测试R4等于3(S是多余的,由汇编程序自动插入)SUB R4,R5,R7,LSR R2 ;通过R2底部字节数逻辑右移R7,从R5中减去结果,并;将答案放入R4MOV PC,R14 ;从子程序返回MOVS PC,R14 ;从中断返回,并从SPSR方式保存
25、CPSR4PSR转移(MRS、MSR):该指令仅当条件为真时执行,参见表44。MRS和MSR指令来自于数据处理操作的子集,并用TEQ、TST、CMN和CMP指令执行,不置位S标志,编码参见以下图410。这些指令同意对CPSR和SPSR存放器存取。MRS指令同意将CPSR或SPSR_的内容移入通用存放器。MSR指令同意将通用存放器的内容移入CPSR或SPSR_存放器。MSR指令也同意将一个立即数或存放器内容转移到CPSR或SPSR_存放器的条件码标志(N、Z、C和V)而不改变操纵位。在这种情况下,指定的存放器内容的高4位或32位立即数被写入相应PSR(程序状态存放器)的高4位。操作数限制: 在用
26、户方式,CPSR的操纵位受保护,因而只有CPSR的条件码标志能够改变。在其它(特许)方式,整个CPSR均可改变。 软件决不能改变CPSR中T位的状态。假如出现这种情况,处理器将进入无法意料的状态。 存取的SPSR存放器取决于执行时的方式。例如,当处理器在FIQ方式时,只有SPSR_fiq是可存取的。 不能将R15指定为源或目的存放器。 在用户方式下不能存取SPSR,由于该存放器不存在(用户不能使用)。图410:MRS、MSR指令格式保存位:ARM920T中只定义了PSR的12个位(N、Z、C、V、I、F、T和M4:0),其余位保存为今后的处理器使用。为确保ARM920T和今后处理器之间的最大兼
27、容性,应当恪守以下原则: 当改变PSR的值时,应当保护保存位; 当检查PSR状态时,程序不应当依赖保存位的特定值,由于今后的处理器可能会将它们认作1或0。例:以下顺序完成方式改变:MRS R0,CPSR ;复制CPSRBIC R0,R0,#0x1F;方式位清零,马上CPSR.M4:0清零ORR R0,R0,#new_mode ;选择新方式MSR CPSR,R0 ;回写修正后的CPSR当目的只是简单地改变PSR中的条件方式码时,可直截了当将值写入标志位而不必妨碍操纵位。以下指令对N、Z、C和V标志置位:MSR CPSR_flg,#0xF0000000 ;对所有标志位置位,不考虑它们的过去状态(不
28、妨碍操纵位)不要试图向整个PSR写入8位立即数,由于这种操作不保护保存位。指令循环周期:PSR转移占用1S增加的周期,这里S定义为顺序(S-周期)。汇编语言句法: MRS 将PSR内容转移到存放器MRScond Rd, MSR 将存放器内容转移到PSRMSRcond ,Rm MSR 只将存放器内容转移到PSR标志位MSRcond ,Rm存放器内容最重要的4位分别写入N、Z、C和V标志。 MSR 只将立即数转移到PSR标志位MSRcond ,应当用符号表示分别写入N、Z、C和V标志的最重要4位的32位数值。关键:cond 双字母条件助记符,见表44Rd and Rm 除R15外的存放器表达式 C
29、PSR, CPSR_all, SPSR或SPSR_all. (CPSR和CPSR_all与SPSR和SPSR_all意义一样) CPSR_flg或SPSR_flg 假如使用,汇编程序将会产生一个移位的立即8位域来匹配表达式,假如不用会出错例:在用户方式,指令表现为:MSR CPSR_all,Rm ; CPSR31:28 - Rm31:28MSR CPSR_flg,Rm ; CPSR31:28 - Rm31:28MSR CPSR_flg,#0xA0000000 ; CPSR31:28 - 0xA (set N,C; clear Z,V)MRS Rd,CPSR ; Rd31:0 - CPSR31:
30、0在特许方式,指令表现为:MSR CPSR_all,Rm ; CPSR31:0 - Rm31:0MSR CPSR_flg,Rm ; CPSR31:28 - Rm31:28MSR CPSR_flg,#0x50000000 ; CPSR31:28 - 0x5 (set Z,V; clear N,C)MSR SPSR_all,Rm ; SPSR_31:0- Rm31:0MSR SPSR_flg,Rm ; SPSR_31:28 - Rm31:28MSR SPSR_flg,#0xC0000000 ; SPSR_31:28 - 0xC (set N,Z; clear C,V)MRS Rd,SPSR ; R
31、d31:0 - SPSR_31:05乘和带累加的乘(MUL、MLA):该指令仅当条件为真时执行,参见表44。指令编码见以下图411。乘和带累加的乘指令使用8位布氏运算法则执行整形乘法。图411:MUL、MLA指令格式指令的乘法方式为Rd:=Rm*Rs,Rn不考虑,并被设置为零,以兼容今后可能晋级的指令集。带累加的乘法方式为Rd:=Rm*Rs+Rn,保存了在某些环境下的一个外在ADD指令。两种指令方式均以有符号(两种独立)或无符号整数作操作数工作。32位有符号乘法和无符号乘法的结果仅在高32位不同,低32位结果是一样的。这些指令进产生乘法的低32位,既可用于有符号乘法,也可用于无符号乘法。例如操
32、作数A操作数B结果0xFFFFFFF60x000000140xFFFFFF381)假如操作数被当作有符号的操作数A为-10,操作数B为20,结果-200被正确地表示为0xFFFFFF38。2)假如操作数被当作无符号的操作数A为4294967286,操作数B为20,结果为85899345720,即0x13FFFFFF38,因而最低32位为0xFFFFFF38。操作数限制:目的存放器Rd不一定与操作数存放器Rm一样。R15必须不能被当作操作数或目的存放器。所有其它存放器的组合都会给出正确结果,当需要时Rd、Rn和Rs可用作同一个存放器。CPSR标志:可任意置位CPSR的标志位,它由指令中S位操纵。
33、N(负)和Z(零)标志依照结果正确置位(N等于结果的bit31位,Z当且仅当结果为零时置位)。C(进位)标志置位无意义的值V(溢出)标志不受妨碍。指令循环周期MUL指令占用1S+mI周期,MLA指令占用1S+(m+1)I周期,这里S和I分别代表连续(S周期)和内部(I周期)。m 执行乘法所需的8位乘数阵列周期数,由Rs指定的乘数操作数操纵。其可能值如下:1 假如乘数操作数32:8位为全0或全12 假如乘数操作数32:16 位为全0或全13 假如乘数操作数32:24 位为全0或全14 所有其它情况汇编语言句法MUL cond S Rd, Rm, RsMLA cond S Rd, Rm, Rs,
34、Rncond 双字母条件助记符,见表44S 假如S出现,置位条件码Rd, Rm, Rs and Rn 除R15外的存放器表达式例:MUL R1,R2,R3 ; R1:=R2*R3MLAEQS R1,R2,R3,R4 ;ConditionallyR1:=R2*R3+R4, Setting condition codes.6长乘和带累加的长乘(MULL、MLAL) 该指令仅当条件为真时执行,参见表44。指令编码见以下图412。长乘指令执行两个32位操作数整数乘法,并产生64位结果。有符号和无符号乘法带可选的累加给出4种变化。图412:MULL、MLAL指令格式乘法方式(UMULL和SMULL)占用
35、两个32位数,相乘后得出方式为RdHi,RdLo:=Rm*Rs的结果。64位结果的低32位写入RdLo,结果的高32位写入RdHi。带累加乘法方式(UMLAL和SMLAL)占用两个32位数,相乘后再加一个64位数得出方式为RdHi,RdLo:=Rm*Rs+RdHi,RdLo的结果。64位加数的低32从RdLo读取,64位加数的高32从RdHi读取,64位结果的低32位写入RdLo,结果的高32位写入RdHi。操作数限制 R15不能用作操作数或目的存放器。 RdHi、RdLo和Rm必须指定不同的存放器。CPSR标志对CPSR中的标志置位是任意的,并受指令中S位操纵。N和Z标志依照结果来置位(N为
36、结果的bit63,Z被置位当且仅当全部64位为0时)。C和V置为无意义的值。指令循环周期MULL占用1S+(m+1)I周期,MLAL占用1S+(m+2)周期,这里m是执行乘法所需的8位乘数阵列周期数,由Rs指定的乘数操作数操纵。其可能值如下:对有符号指令SMULL、SMLAL 假如乘数操作数31:8位为全0或全1 假如乘数操作数31:16 位为全0或全1 假如乘数操作数31:24 位为全0或全1 所有其它情况对无符号指令UMULL、UMLAL 假如乘数操作数31:8位为全0或全1 假如乘数操作数31:16 位为全0或全1 假如乘数操作数31:24 位为全0或全1 所有其它情况S和I分别代表连续
37、(S周期)和内部(I周期)。汇编句法表47. 汇编程序句法描绘这里:cond 双字母条件助记符,见表44S 假如S出现,置位条件码RdLo, RdHi, Rm, Rs 除R15外的存放器表达式例UMULL R1,R4,R2,R3 ; R4,R1:=R2*R3UMLALS R1,R5,R2,R3 ; R5,R1:=R2*R3+R57单数据转移:该指令仅当条件为真时执行参见表44。指令编码见以下图413。单数据传输指令用于装载或存储单字节数据或字数据。用于传输的“存储器地址”是由增加或减少一个基址存放器的偏移量而得到的。假如需要自动索引,则该计算结果能够被回写到这个基址存放器。图4-13: 单数据
38、转移指令偏移量和自动索引在指令中,基址存放器的偏移量既能够是12 bit的无符号立即数,也能够是一个第二存放器(可能被移位)。当U=1时基址存放器Rn加上偏移量,而U=0时基址存放器Rn减去偏移量。偏移量的修正能够在基址存放器被用于传输地址之前(前索引P=1)或之后(后索引P=0)关于寻址方式是增加依然减少方式,指令的W位(即D21)给出了可选项。 当W=1时,修正的基址存放器值能够回写到基址存放器中;而当W=0时,基址存放器值不变。在前索引的寻址方式的情况下,既然通过设置偏移量为零而使旧的基址存放器值得以保存,那么W位是多余的,同时总被设置为0。因而前索引数据传输总是回写到已经修正的基址存放
39、器。在后索引数据传输中W位的唯一用途是在特权方式编码中,其中设置W位使得在非特权方式下传输数据,同意操作系统在系统中产生一个用户地址,如此存储器治理硬件将会获得硬件的更好应用。 移位存放器偏移量8个移位操纵位已在数据处理指令一节中介绍过。但移位量指定的存放器在本指令级别中是无效的,见图4-4。字节和字:该指令级别可用于在ARM920T存放器和存储器之间转移一个字节(B=1)或一个字(B=0)。LDR(B)和STR(B)指令的功能受ARM920T内核BIGEND操纵信号的妨碍。两种可能的结果表达如下。Little-Endian配置假如提供的地址是以字为边界,则LDRB指期望数据总线上装入的数据是
40、70如此的一个字节数据,假如一个字地址加1,则通过数据总线上装入158,以此类推。这个被选字节被放入目的存放器的底部8个位,并以0填充存放器的其余位。参见图2-2。一个字节存储(STRB)是通过数据总线输出310将源存放器底部8个位重复4次。外部存储器系统应当激活适当字节子系统来存储数据。一个字装入(LDR)通常使用一个字陈列地址。但一个字边界的地址偏置会引起数据被循环进入存放器,因而地址字节占用07位。这意味着来自字边界偏置02存取的半字将会被正确存入存放器的015位。然后需要两个移位操作来去除或增加符号扩展到高16位。一个字存储(STR)应产生一个字陈列地址。假如地址不是字陈列的,则出如今
41、数据总线上的字不受妨碍,即存储到存放器的bit31总是出如今数据总线的bit31。图4-14. Little-Endian偏移寻址Big-Endian配置:假如提供给地址的是以字为边界,则希望是通过数据总线输入3124装入(LDRB)一个字节数据,假如一个字地址加上一个字节则通过数据总线输入2316装入,以此类推。这个被选字节被放入目的存放器的底部8个位,并以0填充存放器的其余位。参见图2-1。一个字节存储(STRB)是通过数据总线输出310将源存放器底部8个位重复4次。外部存储器系统应当激活适当字节子系统来存储数据。一个字装入(LDR)通常使用一个字陈列地址。但一个字边界0或2的地址偏置会引
42、起数据被循环进入存放器,因而偏置地址字节占用3124位。这意味着这些偏置存取的半字将会被正确存入存放器的1631位。然后需要一次移位操作将数据(任意扩展符号)移入低16位。一个字边界1或3的地址偏置会引起数据被循环进入存放器,因而地址字节占用158位。一个字存储(STR)应产生一个字陈列地址。假如地址不是字陈列的,则出如今数据总线上的字不受妨碍,即存储到存放器的bit31总是出如今数据总线的bit31。R15的使用:假如将R15指定为根本存放器(Rn)则不必指定回写。当用R15左根本存放器时,必须记住它包含一个来自当前指令地址的8字节地址。不能将R15用作存放器偏置(Rm)。当R15为存放器存
43、储指令(STR)的源存放器(Rd)时,存储的值为指令地址加12。使用根本存放器的约束:1)当配置迟的中止时,下面的例子代码非常难作为根本存放器Rn展开,并在中止处理程序开场之前得到更新,有时无法计算初始值。2)中止后,下面的例子代码非常难作为根本存放器Rn展开,并在中止处理程序开场之前得到更新,有时无法计算初始值。例:LDR R0,R1,R1因而不能使用后寻址的LDR或STR指令,这里Rm是与Rn一样的存放器。数据中止:对存储器治理系统而言,对合法地址的转移也可能出现咨询题。例如,使用虚拟内存的系统中也许没有主内存。内存治理器通过将处理器ABORT输入变高发出信号,这就出现了数据中止圈套。直到系统软件处理这个咨询题,然后指令重新开场执行原程序。指令周期:正常的LDR指令占用1S+1N+1I周期,LDR PC占用2S+2N+1I周期,这里,S、N和I分别定义为顺序(S-周期)、非顺序(N-周期)和内部(I-周期)。STR指令占用2N执行周期。汇编程序句法: cond BT Rd, 这里:LDR 从存储器调入