《ARM培训讲义提纲11091.docx》由会员分享,可在线阅读,更多相关《ARM培训讲义提纲11091.docx(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Xidian University 西安电子科技大学ARM培训训讲义提纲纲单 位:西安安电子科技技大学 编 写: 何何方勇 编写日期: 20005年7月月1日 1. 绪言本次ARMM培训主要要使各位受受训人员了了解嵌入式式操作系统统的基本概概念、软硬硬件构成框框架、以及及掌握与嵌嵌入式操作作系统相关关的知识。随着通信技技术、电子子技术、计计算机技术术、以及微微电子技术术的发展,片片上系统(SSOC)成成为当今电电子技术的的一大主流流;这就使使得嵌入式式开发技术术成为整个个业界的研研究和开发发的热点。我我们知道当当今世界通通信与信息息技术发展展的3大热热点是:第第三、四代代移动通信信技术、数数字
2、电视技技术、以及及汽车电子子技术。在在这几个热热点技术的的最终实现现将被纳入入系统的概概念,其中中嵌入式系系统将在里里面伴有重重要的角色色。2. 嵌入式操作作系统嵌入式操作作系统作为为一种新的的系统,我我们应该怎怎么把握呢呢?以下我我们将简要要介绍一下下嵌入式系系统。2.1. 嵌入式操作作系统的基基本概念从字面上,我我们可以从从两方面理理解嵌入式式系统:嵌嵌入式、系系统。列举举适当的例例子说明嵌嵌入式系统统的应用:手持设备备、大型通通信设备2.2. 嵌入式操作作系统与常常见的单片片机、DSSP系统的的细微区别别从系统的概概念出发讲讲解:单片片机、和DDSP是没没有系统概概念的2.3. 嵌入式操
3、作作系统的软软硬件平台台开发1嵌入式式操作系统统的硬件构构成:核心心处理器、程程序和数据据存储器、总总线系统、外外围接口(设设备)等;2嵌入式式操作系统统的软件构构成:系统统软件、AAPI、底底层驱动、应应用程序等等结合微机系系统操作系系统讲解3常见嵌嵌入式操作作系统:VVxWorrks、PPSOS、LLINUXX、WINNCE、NNUCLEEUS等,各各种操作系系统的区别别和优点及及应用前景景。2.4. 怎样进行嵌嵌入式系统统设计嵌入式系统统开发是本本次培训的的主要内容容,那我们们应该从以以下方面入入手:处理理器、硬件件部件、操操作系统、编编程语言、软软件开发工工具、硬件件开发平台台、软件组
4、组成。1) 处理器:速速度、IOO 设计指指标、处理理器的软件件支持、处处理器调试试方式、处处理器提供供商的信誉誉度;2) 硬件部件:硬件实现现难度、开开发周期、市市场前景、供供货情况3) 操作系统:产品的适适合度、调调试难度、代代码结构、可可开发潜力力、移植可可行性4) 编程语言:高级语言言、低级语语言5) 软件开发工工具:系统统调试功能能如何、支支持的库函函数、开发发商的软件件支持3. 嵌入式处理理器在以上的讲讲义中我们们简要提到到了嵌入式式开发的各各方面的问问题,接下下来我们将将从硬件开开始讲解。在在嵌入式系系统中,主主要以ARRM芯片作作为该系统统的核心芯芯片。3.1. 嵌入式处理理器
5、简介ARM是AAdvannced RISCC Macchinees的缩写写,ARMM公司于11990成成立 ,AARM以低低成本、低低功耗、高高性能迅速速占领了全全球市场。其其产品广泛泛应用到移移动通信、消消费电子、以以及嵌入式式市场。AARM公司司不生产芯芯片,只是是IP供应应商,只做做设计。常见ARMM处理器系系列有:AARM7系系列、ARRM9系列列、ARMM9E系列列、ARMM10系列列、SeccurCoore SSC1000、Strrong ARM、XXScalle。在此此,我们主主要讲解AARM7系系列、ARRM9系列列:1) ARM7系系列:0.9MIPPS/MHHz3级流流水、
6、冯.诺依曼结结构;其内内核主要有有ARM77TDMII和ARMM720TT;T:支支持16位位THUMMB指令,DD支持在片片调试,MM增强型乘乘法器,产产生全644位结果,II:嵌入式式ICE硬硬件提供片片上断点和和调试点支支持2) ARM9系系列:1.1MIPPS/MHHz5级流流水、哈佛佛结构;其其内核主要要有ARMM920TT、ARMM722TT和ARMM940TT;3.2. 基于ARMM内核的芯芯片扩展由于ARMM公司只做做IP,不不生产具体体的芯片;所以我们们所使用的的ARM芯芯片都是全全世界其他他硬件芯片片厂商在经经过ARMM公司的授授权,然后后在此基础础上进行硬硬件扩展,以以满
7、足不同同领域的需需求。ARM9系系列是当今今嵌入式系系统应用的的主流芯片片内核技术术。全世界界各大厂商商都采用AARM公司司的IP来来开发自己己的ARMM芯片,主主要厂商有有:三星、AAD、TII、菲利普普、Inttel、CCIRRUUS LOOGIC等等。下面,我们们以三星公公司的ARRM芯片SS3C24410X为为例来简要要介绍基于于ARM内内核的芯片片扩展。注意:ARRM9系列列是兼容AARM7系系列的。3.3. ARM9220T内核核详解现在基于AARM9220T内核核的芯片逐逐渐成为嵌嵌入式系统统芯片的主主流,我们们有必要详详解其结构构;这是进进一步学习习软件开发发的基础。内内核的结
8、构构图如下所所示:下面我们将将重点介绍绍ARM9920T的的协处理器器CP155和内存管管理单元MMMU3.3.1. 协处理器CCP153.3.2. 内存管理单单元MMUU4. 软件开发嵌入式系统统的软件开开发包括:操作系统统和应用程程序开发两两个方面。下下面我们进进一步讲解解基于ARRM芯片的的汇编语言言。4.1. ARM编程程模型ARM常见见版本是VV4和V55,现在主主要用的是是V4,处理器工作作状态:AARM,TTHUMBB开关状态:进入THHUMB状状态、进入入ARM状状态存储器格式式:大小端端点格式指令长度:32位、116位数据类型:字,半字字,字节操作模式:7种寄存器:331个通
9、用用寄存器和和6个状态态寄存器中断:4.2. ARM基本本寻址方式式寄存器寻址址:立即寻址:寄存器移位位寻址:寄存器间接接寻址:变址寻址:多寄存器寻寻址:堆栈寻址:块拷贝寻址址:相对寻址:4.3. ARM指令令集本章内容是是详细讲解解ARM指指令集。4.3.1. ARM指令令格式1 指令集格式式:ARM指令令集格式如如下表41所示:表41:ARM指指令集格式式注意:某些指令码码没有定义义,但并不不导致未定定义指令陷陷阱出现,例例如一个乘乘法指令的的第6位变变为1。不不应使用这这些指令,因因为它们的的作用也许许会由未来来的ARMM执行2 ARM指令令集表:下面表42、表443列出出了ARMM指令
10、集:表42:表42:ARM指指令集表43:表43:ARM指指令集3 条件码:在ARM状状态下,所所有指令都都会根据CCPSR条条件码和指指令条件域域的状态被被有条件地地执行。该该域(位331:288)决定了了执行一条条指令的环环境。如果果C、N、ZZ和V标志志的状态满满足该域的的编码条件件,指令就就被执行,否否则不予执执行。存在着166个可能条条件,每种种由复加在在指令记忆忆符后的一一个双字符符后缀表示示。例如,BBrancch(B为为汇编语言言)变为BBEQ表示示“Brannch iif Eqqual”,意思是是当Z标志志被置位时时执行Brranchh指令。实实际上,表表3-2中中所列的11
11、5个不同同的条件也也许会用到到,第166个(11111)保保留,不能能使用。在在后缀缺省省时,大多多数指令的的条件域被被设置成“Alwaays”(后缀AAL)。这这意味着不不管CPSSR的条件件码是什么么,指令永永远被执行行。下表444给出出了条件码码概况:表44:ARM指指令中的条条件码4.3.2. ARM指令令集详解1分支支与交换(BBX指令,Branch和Exchange指令):该指令仅仅仅在条件为为真时被执执行,参见见表444。该指令通过过将一个通通用寄存器器Rn的内内容复制到到程序计数数器PC来来执行一个个分支。这这个分支会会引起管道道流,并会会根据Rnn指定的地地址再入。该该指令也
12、允允许交换指指令集。当当执行该指指令时,RRn0的值决定定了是否按按照ARMM指令还是是THUMMB指令对对指令流进进行解码。指指令格式如如下图41所示:图41:BX指令令格式指令循环环时间:执行BX指指令占用22S+1NN周期(与与BL一样样),这里里S和N分分别代表连连续(S周周期)和非非连续(NN周期)。汇编程序序语法:BX-分支支和交换指指令BX condd Rn ;ccond为 双字字母条件记记忆符(即即条件码),见见表444,而Rnn 表示一一个有效寄寄存器(比比如:R00)使用R115作操作作数:如果将R115作操作作数,该情情况未定义义。例:ADR RR0, IInto_THU
13、MMB + 1 ;产生分支支目标地址址,bitt0置位,进进入THUUMB状态态BX R00 ;分支并改改变到THHUMB状状,R155(PC):=R00CODE116 ;汇编作为为THUMMB指令的的后续码Into_THUMMBADR RR5, BBack_to_AARM ;产生分支支目标到字字排列地址址,bitt0置低,变变回到ARRMBX R55 ;分支并变变回到ARRM状态,R115(PCC):=RR0ALIGNN ;字排列CODE332 ; 汇编作作为ARMM指令的后后续码Back_to_AARM2分支支与带链接接分支(BB、BL)该指令仅仅仅在条件为为真时被执执行,参见见表444。
14、该指令令的编码如如下图42所示。图42:B、BLL指令格式式分支指令包包含有一个个有符号的的2态补充充24位偏偏移(相当于225根地址址线+符号号位,即+/-322M字节)。这被左左移两位,符符号扩展至至32位,并并加到程序序计数器PPC。因此此该指令可可以指定+/-322M字节的的分支。该该指令偏置置必须考虑虑预取操作作,它会引引起程序计计数器PCC超前当前前指令2个个字(8个个字节)。超过+/-32M字字节的分支支必须使用用偏置或事事先装入寄寄存器的绝绝对目标。在在这种情况况下,如果果要求有带带链接类型型的分支操操作,应当当将PC值值人工存入入R14。链接位:带链接的分分支(BLL)将旧的
15、的PC写入入当前存储储空间的链链接寄存器器(R144)。写入入R14的的值被调整整到允许预预取,并包包含紧跟着着“分支与链链接指令”的指令地地址。注意意CPSRR不保留PPC值,RR1411:0总总是清零。从带链接的的分支返回回,如果链链接寄存器器仍然有效效,可使用用MOV PC,RR14;或或如果链接接寄存器以以被Rn存存作堆栈指指针,使用用LDMRnn!,.PC。指令循环环时间:分支和带链链接分支指指令占用22S+1NN增加的周周期(与BBX一样),这这里S和NN分别代表表连续(SS周期)和和内部(II周期)。汇编程序序语法:中的内内容任意,中的内内容必须出出现BLcondd L 常常用请
16、求带带链接分支支的指令形形式。如果果缺省,RR14不受受指令影响响,即不将将旧的PCC值存入RR14。condd如表44中所示示的双字母母助记符(条条件码),如如果缺省,默默认为ALL(Alwways)。目标单元元,汇编程程序计算偏偏移量。例hereBBALheere ;等待,指指令汇编成成0xEAAFFFFFFE B theere ;等待,默默认条件是是“Alwaays”CMP RR1,#00 ; RR10?比较BEQ ffred ; 为零,则则跳转;反反之,继续续下一个指指令BL suub+ROOM ; 跳转,调调用子程序序ADDS R1,#1 ; R1R11,设置CPSSR标志BLCC
17、sub ; C00, 调用子子程序3数据据处理:数据处理指指令仅在条条件为真时时被执行,参参见表44。该指指令编码如如下图43所示。图43:数据处理理指令该指令通过过对一或两两个操作数数进行指定定的算术或或逻辑运算算产生结果果。第一个个操作数总总是一个寄寄存器(RRn)。根据指令中中L(即DD25)位位的值,第第二个操作作数可能是是一个移位位寄存器(RRm)或一一个8位循循环立即数数(Immm)。根据据指令中SS位的值,确确定该指令令的结果是是否可以保保护或更新新CPSRR中的条件件码。确定的运算算(TSTT(OP11与OP22)、TEEQ(OPP1异或OOP2)、CCMP(OOP1-OOP2
18、)、CCMN(OOP1+OOP2)不不将结果写写入Rd。它它们只用执执行检测和和设置结果果中的条件件码并总对对S位置位位。CPSRR标志:数据处理运运算可分为为逻辑运算算和算术运运算,逻辑辑运算(AAND、EEOR、TTST、TTEQ、OORR、MMOV、BBIC、MMVN)对对操作数的的所有相应应位或产生生结果的操操作数执行行逻辑运算算。如果SS位被置位位(并且RRd不是RR15,见见下表),则则CPSRR中的V标标志不受影影响,C标标志将被置置位来执行行barrrel sshiftter(或或当移位操操作为LSSL #00时保护),ZZ标志当且且仅当结果果全零时被被置位,NN被置为结结果b
19、itt31的逻逻辑值。ARM数据据处理指令令见下表445表45:数据处理理指令算术运算(SSUB、RRSB、AADD、AADC、SSBC、RRSC、CCMN)将将每个操作作数都看作作是一个332位的整整数(无符符号或两个个独立的符符号,两种种情况时一一样的)。如如果S位被被置位(并并且Rd不不是R155),则CCPSR中中的V标志志在结果的的bit331出现溢溢出时被置置位,如果果操作数均均为无符号号数可以不不理会,但但如果操作作数为两个个独立的有有符号数则则会发出错错误提示,CC标志会由由于执行AALU的bbit311被置位,ZZ标志当且且仅当结果果全零时被被置位,NN标志被置置为结果bbi
20、t311的值(如如果认为操操作数为两两个独立的的有符号数数时指示结结果为负)。移位:当第二个操操作数被指指定为移位位寄存器时时,寄存器器的移位操操作受指令令中的移位位域控制。该该域指示要要执行的移移位类型(逻逻辑左移或或右移、算算术右移或或循环右移移)。寄存存器要移动动的值可包包含在指令令的立即域域中,或者者在另一个个寄存器(除除了R155)。不同同移位类型型的编码如如图4-44所示。 图4-44: ARRM移位操操作指定偏移移量指令:当指令中指指定了偏移移量时,它它包含了一一个5位的的区域,其其赋值范围围为0331。逻辑辑左移(LLSL)获获取Rm的的内容并将将每一位移移动指定量量到更有意意
21、义的位置置。结果的的最不重要要位以零填填充,Rmm的最高位位被丢弃,并并不映射到到结果中,除除非当ALLU运算处处于逻辑状状态(见上上面)时,丢丢弃的最不不重要的位位变为shhifteer的进位位输出,并并可能锁定定CPSRR的S位。例例如,LSSL #55的影响如如下图45所示。图45:逻辑左移移注意:LSL #5是一个个特例,这这里shiifterr进位输出出是CPSSR C标标志的过去去值。Rmm的内容被被直接用作作第二个操操作数。逻逻辑右移(LLSR)指指令类似,但但是Rm的的内容被移移到结果最最不重要的的位置。LLSR #5的影响响如下图446所示示。图46:逻辑右移移此种移位使使得
22、Rm的的第31位位有零进位位输出。与与逻辑左移移零一样,逻逻辑右移零零是多余的的,所以汇汇编程序将将LSR #0(以以及ASRR #0和和ROR #0)转转换成LSSL #00,并允许许指定LSSR #332。算术右移(AASR)与与逻辑右移移类似,不不同的是高高位被Rmm的bitt31填充充而不是零零。这保护护了2个独独立符号状状态中的符符号,例如如,ASRR #5如如下图47所示。图47:算术右移移此种移位使使得Rm的的bit331重新用用作进位输输出,并且且操作数22的每一位位也等于RRm的biit31。所所以根据RRm的biit31的的值,结果果为全1或或全0。循环右移(RROR)操操
23、作是将逻逻辑右移操操作中移出出去的位再再引入放置置在结果的的高端,在在逻辑右移移中常用零零来填充高高位。例如如,RORR #5如如下图48所示。图48:循环右移移期望给ROOR #00的移位域域形式用于于对barrrel shiffter的的特殊功能能,即带扩扩展的循环环右移编码码。这个循循环右移是是它使用附加加的CPSSR的C标标志来提供供一个要被被移位的 33 位位的数量到到Rm内容容的最高端端,参见下下图499。 图图49: 带扩展展循环右移移指定偏移移量寄存器器只有Rs的的最低端字字节被用来来确定偏移移量。Rss可以是除除R15外外的任何寄寄存器。如果该字节节为零,RRm未改变变的内容
24、将将被当作第第二操作数数,并且旧旧的CPSSR的 CC标志值将将会被作为为shiffter的的进位输出出。如果1到331位之间间字节有值值,移位结结果将与指指定移位指指令的同一一个值和移移位操作匹匹配。如果字节中中的值大于于等于322,结果为为上面所述述移位的逻逻辑扩展:1. LSL 332结果为为零,进位位输出等于于Rm的00位;2. LSL大于于32结果果为零,进进位为零;3. LSR 332结果为为零,进位位输出等于于Rm的331位;4. LSR大于于32结果果为零,进进位为零;5. ASR大于于等于322结果和进进位等于RRm的311位;6. ROR 332结果等等于Rm,进进位等于R
25、Rm的311位;7. ROR nn结果和进进位与ROOR n-32相同同,这里nn大于322;因此不不断从n中中减去322,直到nn值在131之间间,见前面面。注意:必须使带有有控制移位位寄存器指指令的biit 7为为零,该位位为1会引引起指令为为乘或未定定义。立即数循循环:立即数循环环域是一个个4位无符符号整数,指指定对8位位立即数进进行移位操操作。该值值为扩展到到32位的的零,然后后通过在循循环域中的的两倍值服服从右移。这这可以产生生许多常数数,例如22的幂。写入R115当Rd为除除R15外外的寄存器器时,CPPSR中的的条件码标标志可以从从前面所述述的ALUU标志更新新。当Rd为RR15
26、并且且指令中的的S标志未未置位时,操操作结果被被放入R115且CPPSR不受受影响。当Rd为RR15且SS标志置位位时,操作作结果被放放入R155,对应于于当前模式式的SPSSR被移入入CPSRR。这允许许自动存储储PC和CCPSR的的状态改变变。这种指指令格式在在用户模式式下不能使使用。用R155作操作数数如果R155(PC)被被用于数据据处理指令令中的一个个操作数,可可直接使用用该寄存器器。PC值就是是指令地址址、加上由由于指令预预取的8或或12个字字节。如果果指令中指指定了移位位量,PCC为前8个个字节。如如果用寄存存器指定移移位量,则则PC为前前12个字字节。TEQ、TTST、CCMP
27、和CCMN操作作码:注意:TEQ、TTST、CCMP和CCMN不写写结果操作作结果但置置位CPSSR中的标标志位。即即使助记符符中没有指指定,汇编编程序也应应当总将这这些指令的的S标志置置位。不能使用TTEQP指指令,它是是早期ARRM处理器器使用的TTEQ指令令:代替PPSR转移移操作。在ARM9920T中中TEQPP的功能是是:如果处处理器工作作在特许模模式就将SSPSR_移入入CPSRR,如果在在用户模式式什么也不不做。指令周期:数据处理理指令增加加的周期数数如下表44-6:表4-6: 增加的的循环时间间注:S、NN和I分别别定义为顺顺序(S-周期)、非非顺序(NN-周期)和和内部(II
28、-周期)。汇编程序句句法 MOV,MMVN (单操作数数指令).conddS Rd, CMP,CCMN,TTEQ,TTST (无结果指指令).condd Rnn, AND,EEOR,SSUB,RRSB,AADD,AADC,SSBC,RRSC,OORR,BBICconddS Rd,Rn,这里: Rm, 或,condd 双字母条条件助记符符,见表444S 如果S表表示(指CMP, CMNN, TEEQ, TTST),置置位条件码码.Rd, RRn 和 Rm 寄存器号号表达式 如果使用用,汇编程程序将会产产生一个移移位的立即即8位域来来匹配表达达式,如果果不用会出出错 或 #exxpresssion
29、n, 或 RRXX (带扩扩展右移11位).s ASL, LSLL, LSSR, AASR, ROR. (ASSL与LSL意义义相同,它它们的汇编编码一样)例:ADDEQQ R2,R4,RR5 ;如果Z标标志置位,使使R2=RR4+R55TEQS R4,#3 ;测试R44等于3(S是多余余的,由汇汇编程序自自动插入)SUB RR4,R55,R7,LSR R2 ;通过R22底部字节节数逻辑右右移R7,从从R5中减减去结果,并并;将答案放放入R4MOV PPC,R114 ;从子程序序返回MOVS PC,RR14 ;从中断返返回,并从从SPSRR方式保存存CPSRR4PSSR转移(MMRS、MMSR
30、):该指令仅当当条件为真真时执行,参参见表44。MRRS和MSSR指令来来自于数据据处理操作作的子集,并并用TEQQ、TSTT、CMNN和CMPP指令执行行,不置位位S标志,编编码参见下下图4110。这些指令允允许对CPPSR和SSPSR寄寄存器存取取。MRSS指令允许许将CPSSR或SPPSR_的内容容移入通用用寄存器。MMSR指令令允许将通通用寄存器器的内容移移入CPSSR或SPPSR_寄存器器。MSR指令令也允许将将一个立即即数或寄存存器内容转转移到CPPSR或SSPSR_寄存存器的条件件码标志(NN、Z、CC和V)而而不改变控控制位。在在这种情况况下,指定定的寄存器器内容的高高4位或3
31、32位立即即数被写入入相应PSSR(程序序状态寄存存器)的高高4位。操作数限限制: 在用户模式式,CPSRR的控制位位受保护,所所以只有CCPSR的的条件码标标志可以改改变。在其其它(特许许)模式,整整个CPSSR均可改改变。 软件决不能能改变CPSSR中T位位的状态。如如果出现这这种情况,处处理器将进进入无法预预料的状态态。 存取的SPPSR寄存存器取决于于执行时的的方式。例例如,当处处理器在FFIQ模式式时,只有有SPSRR_fiqq是可存取取的。 不能将R115指定为为源或目的的寄存器。 在用户模式式下不能存取SPSRR,因为该该寄存器不不存在(用用户不能使使用)。图4100:MRSS、
32、MSRR指令格式式保留位:ARM9220T中只只定义了PPSR的112个位(NN、Z、CC、V、II、F、TT和M44:0),其其余位保留留为将来的的处理器使使用。为确保ARRM9200T和将来来处理器之之间的最大大兼容性,应应当遵守下下列原则: 当改变PPSR的值值时,应当当保护保留留位; 当检查PPSR状态态时,程序序不应当依依赖保留位位的特定值值,因为将将来的处理理器可能会会将它们认认作1或00。例:下列顺序完完成模式改改变:MRS RR0,CPPSR ;复制CPPSRBIC RR0,R00,#0xx1F;模式位清清零,即将将CPSRR.M44:0清清零ORR RR0,R00,#neew
33、_moode ;选择新模模式MSR CCPSR,R0 ;回写修改改后的CPPSR当目的只是是简单地改改变PSRR中的条件件方式码时时,可直接接将值写入入标志位而而不必影响响控制位。下下列指令对对N、Z、CC和V标志志置位:MSR CCPSR_flg,#0xFF00000000 ;对所有标标志位置位位,不考虑虑它们的过过去状态(不不影响控制制位)不要试图向向整个PSSR写入88位立即数数,因为这这种操作不不保护保留留位。指令循环环周期:PSR转移移占用1SS增加的周周期,这里里S定义为为顺序(SS-周期)。汇编语言句句法: MRS 将PSSR内容转转移到寄存存器MRSccond Rd, MSR
34、将寄存存器内容转转移到PSSRMSRccond ,RRm MSR 只将寄寄存器内容容转移到PPSR标志志位MSRccond ,Rm寄存器内容容最重要的的4位分别别写入N、ZZ、C和VV标志。 MSR 只将立立即数转移移到PSRR标志位MSRccond ,应当用符号号表示分别别写入N、ZZ、C和VV标志的最最重要4位位的32位位数值。关键:condd 双字母条条件助记符符,见表444Rd annd Rmm 除R155外的寄存存器表达式式 CPSSR, CCPSR_all, SPSSR或SPSRR_alll. (CCPSR和和CPSRR_alll与SPSRR和SPSRR_alll意义相同同) CP
35、PSR_fflg或SPSRR_flgg 如果使用用,汇编程程序将会产产生一个移移位的立即即8位域来来匹配表达达式,如果果不用会出出错例:在用户模式式,指令表表现为:MSR CCPSR_all,Rm ; CPSSR311:28 - Rm331:288MSR CCPSR_flg,Rm ; CPSSR311:28 - Rm331:288MSR CCPSR_flg,#0xAA00000000 ; CPPSR331:288 - 0xAA (seet N,C; cclearr Z,VV)MRS RRd,CPPSR ; Rd31:00 - CPSSR311:0在特许模式式,指令表表现为:MSR CCPSR_
36、all,Rm ; CPSSR311:0 - RRm311:0MSR CCPSR_flg,Rm ; CPSSR311:28 - Rm331:288MSR CCPSR_flg,#0x5500000000 ; CPPSR331:288 - 0x55 (seet Z,V; cclearr N,CC)MSR SSPSR_all,Rm ; SPSSR_31:0- Rm31:00MSR SSPSR_flg,Rm ; SPSSR_31:28 - RRm311:28MSR SSPSR_flg,#0xCC00000000 ; SPPSR_311:28 - 0xC (sett N,ZZ; cllear C,V)MR
37、S RRd,SPPSR ; Rd31:00 - SPSSR_31:05乘和和带累加的的乘(MUUL、MLLA):该指令仅当当条件为真真时执行,参参见表44。指令令编码见下下图4111。乘和带累加加的乘指令令使用8位位布氏运算算法则执行行整形乘法法。图4111:MULL、MLAA指令格式式指令的乘法法形式为RRd:=RRm*Rss,Rn不不考虑,并并被设置为为零,以兼兼容将来可可能升级的的指令集。带带累加的乘乘法形式为为Rd:=Rm*RRs+Rnn,保存了了在某些环环境下的一一个外在AADD指令令。两种指指令形式均均以有符号号(两种独独立)或无无符号整数数作操作数数工作。32位有符符号乘法和和无
38、符号乘乘法的结果果仅在高332位不同同,低322位结果是是一样的。这这些指令进进产生乘法法的低322位,既可可用于有符符号乘法,也也可用于无无符号乘法法。例如操作数A操作数BB结果0xFFFFFFFFF60x00000000140xFFFFFFFF381)如果操操作数被当当作有符号号的操作数A为为-10,操操作数B为为20,结结果-200被被正确地表表示为0xxFFFFFFF388。2)如果操操作数被当当作无符号号的操作数A为为429449672286,操操作数B为为20,结结果为85589933457220,即0x113FFFFFFF338,所以以最低322位为0xxFFFFFFF388。操
39、作数限限制:目标寄存器器Rd不一一定与操作作数寄存器器Rm一样样。R155必须不能能被当作操操作数或目目标寄存器器。所有其它寄寄存器的组组合都会给给出正确结结果,当需需要时Rdd、Rn和和Rs可用用作同一个个寄存器。CPSR标志:可任意置位位CPSRR的标志位位,它由指指令中S位位控制。NN(负)和和Z(零)标标志根据结结果正确置置位(N等等于结果的的bit331位,ZZ当且仅当当结果为零零时置位)。CC(进位)标标志置位无无意义的值值V(溢出出)标志不不受影响。指令循环环周期MUL指令令占用1SS+mI周周期,MLLA指令占占用1S+(m+11)I周期期,这里SS和I分别别代表连续续(S周期
40、期)和内部部(I周期期)。m 执行行乘法所需需的8位乘乘数阵列周周期数,由由Rs指定定的乘数操操作数控制制。其可能能值如下:1 如果乘数数操作数32:88位为全全0或全112 如果乘数数操作数32:116 位位为全0或或全13 如果乘数数操作数32:224 位位为全0或或全14 所有其它它情况汇编语言言句法MULccondS Rd,RRm,RssMLAccondS Rd,RRm,Rss,Rncondd 双字母条条件助记符符,见表444S 如果S出出现,置位位条件码Rd, RRm, RRs annd Rnn 除R155外的寄存存器表达式式例:MUL RR1,R22,R3 ; R11:=R22*R
41、3MLAEQQS R11,R2,R3,RR4 ;CCondiitionnallyyR1:=R2*RR3+R44, Seettinng coondittion codees.6长乘乘和带累加加的长乘(MMULL、MMLAL)该指令仅当当条件为真真时执行,参参见表44。指令令编码见下下图4112。长乘指令执执行两个332位操作作数整数乘乘法,并产产生64位位结果。有有符号和无无符号乘法法带可选的的累加给出出4种变化化。图4122:MULLL、MLLAL指令令格式乘法形式(UUMULLL和SMUULL)占占用两个332位数,相相乘后得出出形式为RRdHi,RdLoo:=Rmm*Rs的的结果。664位
42、结果果的低322位写入RRdLo,结结果的高332位写入入RdHii。带累加乘法法形式(UUMLALL和SMLLAL)占占用两个332位数,相相乘后再加加一个644位数得出出形式为RRdHi,RdLoo:=Rmm*Rs+RdHii,RdLLo的结果果。64位位加数的低低32从RRdLo读读取,644位加数的的高32从从RdHii读取,664位结果果的低322位写入RRdLo,结结果的高332位写入入RdHii。操作数限限制 R15不能能用作操作作数或目标标寄存器。 RdHi、RRdLo和和Rm必须须指定不同同的寄存器器。CPSRR标志对CPSRR中的标志志置位是任任意的,并并受指令中中S位控制
43、制。N和ZZ标志根据据结果来置置位(N为为结果的bbit633,Z被置置位当且仅仅当全部664位为00时)。CC和V置为为无意义的的值。指令循环环周期MULL占占用1S+(m+11)I周期期,MLAAL占用11S+(mm+2)周周期,这里里m是执行乘乘法所需的的8位乘数数阵列周期期数,由RRs指定的的乘数操作作数控制。其可能值如如下:对有符号指指令SMUULL、SSMLALL 如果乘数操操作数331:8位为全00或全1 如果乘数操操作数331:16 位为为全0或全全1 如果乘数操操作数331:24 位为全全0或全11 所有其它情情况对无符号指指令UMUULL、UUMLALL 如果乘数操操作数331:8位为全00或全1 如果乘数操操作数331:16 位为全全0或全11 如果乘数操操作数331:24 位为全全0或全11 所有其它情情况S和I分别别代表连续续(S周期期)和内部部(I周期期)。汇编句法表47. 汇编程程序句法描描述这里:condd 双字母条条件助记符符,见表444S 如果S出出现,置位位条件码RdLo, RdHHi, RRm, RRs 除R155外的寄存存器表达式式例UMULLL R1,R4,RR2,R33 ; RR4,R1
限制150内