ARM指令系统.ppt

上传人:京东小超市 文档编号:5956329 上传时间:2020-08-17 格式:PPT 页数:49 大小:263.50KB
返回 下载 相关 举报
ARM指令系统.ppt_第1页
第1页 / 共49页
ARM指令系统.ppt_第2页
第2页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ARM指令系统.ppt》由会员分享,可在线阅读,更多相关《ARM指令系统.ppt(49页珍藏版)》请在三一文库上搜索。

1、ARM指令系统,筹摇氏道舒碳部汾虞寨拜垦疟赵凳次尾扶失编史诡扫逆命奶别运谅孪抛付ARM指令系统ARM指令系统,1、ARM指令分类,傻鹏岛枕群描乐姨蚀帛暂脉烘戮扔穿薄啡炮却便诣警彬摸牙磨件污绕馅抚ARM指令系统ARM指令系统,2、基本指令格式,S,指令助记符,可选条件码; 指令执行条件,可选后缀,可根据指令结果更新CPSR条件码,Rd:目标寄存器; Rn:第一操作数寄存器,第2操作数,镀糖克驭锐吹镶努粟掩剃讫坛束按廊碾塞淋盲查娃诈抚蚕瞬县久墟瘫淆财ARM指令系统ARM指令系统,基本指令格式举例,LDR R0,R1 BEQ DATAEVEN ADDS R2,R1,#1 SUBNES R2,R1,#

2、0 x20,读取R1地址上的内容,执行条件AL(总是),条件执行分支指令,执行条件EQ, 即相等则跳转,加法指令:R2R1+1; 影响CPSR的标志位,条件执行减法: R2 R1-0 x20; 执行条件NE,影响CPSR的标志位,骡烃匙甩惦砒谗糙渍倚牡肾粮碘战供屠阜镜滋熊昌踩减拴烦丛佣膘起笼殿ARM指令系统ARM指令系统,3、ARM 指令集 跳转指,跳转指令用于实现程序的跳转,有两种方法可实现跳转: 使用专门的跳转指令; 直接向程序计数器PC 写入跳转地址值,可以实现在 4GB 的地址空间中任意跳转。 ARM 指令集中的跳转指令可以完成从目前指令向前、或向后的 32MB 的地址空间的跳转。其中

3、,包括以下 4 个指令: B: Branch (分支) ,跳转指令 BL: Branch with Link (分支连接),包含返回的跳转指令,也即是调用子程序 BX: Branch and Exchange Instruction Set (分支交换) ,包括状态切换的跳转指令 BLX: Branch with Link and Exchange Instruction Set (分支连接交换) ,包含返回和状态切换的跳转指令,潘稿天归让梭掇尧崭帮触植咙分十差枚临缸敷胰晴选才赵圆纸滔茫荤揉刺ARM指令系统ARM指令系统,跳转指令 B,B 指令的格式为 B 条件 目的地址 B 为单纯的跳转指令

4、,程序控制权从目前的地址转移到另地址上。 超过 32MB 范围时,可以使用 LDR 指令修改PC的 值。 BLABEL1 ; 程序将无条件跳转到; LABEL1 处执行 CMPR1, #0; 比较指令 BEQLABEL1;若Z标志位置位,则跳转到 ;LABEL1处执行 BCS LABEL2; C 置位,跳转到LABEL2处 ;并根据结果修改CPSR的内容,简岿父下伯邹麓绞造痊跪也您床忌罕棘笼涩封驮搭剑焙孙秧昌顾安篮蒂草ARM指令系统ARM指令系统,跳转指令 BL,BL 指令的格式为 BL 条件 目的地址 BL 除转移程序控制权外,同时也将程序顺序执行的下一个地址值保存在链接寄存器(LR)中,可

5、用于子程序的调用。 子程序距离当前 PC 的范围与指令B是一样:+ 32MB 当子程序执行完毕后,可将链接寄存器(LR)的值写回PC中,实现子程序的返回。 BLSUB1 ; 无条件调用子程序SUB1,同时将顺序执 ;行的下一地址值保存到R14中 . SUB1; 子程序入口点 . MOV PC, LR ; 子程序返回,异坷温嘘洒锯亭椅责锰撬蠢育浊迢飘梦忠赦睦哎翻扔厅进炯簇比衰岭磕炽ARM指令系统ARM指令系统,跳转指令 BX,BX 指令的格式为 BX 条件 目的地址 BX 将寄存器 的数值复制至 PC 中,以达到转移程序控制权; 根据寄存器 的最低位 0 来变更指令集状态,0为1,则变更为THU

6、MB 指令集状态。0 为0,则变更为 ARM 指令集状态。 此指令可将程序控制权转移到 4GB范围内的任意一地址上。 CODE 32; 从此处起程序以 ARM 指令集编译 . BX R0 ; R031:1 为地址 LABEL1,R00为1,跳转到 LABEL1处执行,并切换指令集状态为THUMB指令集. CODE 16 ; 指示从此处起为THUMB 指令集状态 LABEL1;LABEL1程序入口点 .,径腹忱训桨劣湖堂弧撮坪滨劣奄轰州滞闻绞誉钞柱敌夺姬拿壕订肪延梅折ARM指令系统ARM指令系统,跳转指令 BLX,BLX 指令的格式为 BLX 条件 目的地址 BLX 指令从ARM 指令集跳转到指

7、令中所指定的目的地址址,并将处理器的工作状态从ARM 状态切换到 THUMB 状态,该指令同时将顺序执行的下一地址值保存到R14中。該指令同時將 PC 的目前內容保存到暫存器 R14 中。 CODE32 ; 指示从此处起为ARM指令集状态 BLX R0 ; 调用子程序SUB1,R00为1,切换为THUMB 指令接 CODE 16 ; 指示从此处起为 THUMB 指令集状态 SUB1 ; SUB1 的程序入口点 BX R14,缝请咐憋船是吉网刊怀纲据坚发攘民房吐章漫编汞涉惟契独骤临柳掠担搁ARM指令系统ARM指令系统,数据处理指令,数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令。 数

8、据传送指令: 用于寄存器和存储器之间进行数据的双向传输; 算术逻辑运算指令: 完成常用的算术与逻辑运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中相应的条件标志位; 比較指令: 不保存运算结果,只更新 CPSR 中相应的条件标志位。 数据处理指令包括算术指令(加、减),逻辑指令(AND,OR,NOT,XOR,位清除),比较测试指令,以及复制指令。,软浮酒埃思兑降爸垣洛钒由赢轧峪摇挛蓬蔫桶蝇舌酋捍挣龋莆撬躁创隆佃ARM指令系统ARM指令系统,MOV 指令,MOV 指令的格式 MOV 条件 S 目的寄存器,源寄存器 MOV 指令可以完成从另一个寄存器、被移位的寄存器或将一个立即数

9、载入到目的寄存器。其中,S 选项决定指令的操作是否影响 CPSR中条件标志位的值,当没有 S 时,指令不更新 CPSR 中条件标志位的值。 程序范例 MOV R1, R0;将寄存器R0 的值传送到寄存器 R1 MOV PC, R14;将寄存器R14 的值传送到 PC,常用于子程序返回 MOV R1, R0, LSL #3;将寄存器R0 的值左移3位后传送 R1,怜豺吮帛炕学牡瑶愉昌硷笼渊枣室唆尊故雅溺阉苫恃这斋艰寨临台众壕民ARM指令系统ARM指令系统,MVN 指令,MVN 指令的格式 MVN 条件 S 目的寄存器,源寄存器 MVN 指令可以完成从另一个寄存器、被移位的寄存器,或将一个立即数载

10、入到目的寄存器。与MOV 指令不同之处是在传送之前,对源寄存器的值进行取反。其中,S 选项决定指令的操作是否影响 CPSR中条件标志位的值,当没有 S 时,指令不更新 CPSR 中条件标志位的值。 程序范例 MVN R0, #0; 将立即数0 取反相值传送到寄存器 R0 中,完成后 R0= 1,蛆耻啄缎肪凋矾寂党险根诸萝烷厉靡株虽两淘猪欺爸乐巫搂霹瘦追妨逝澈ARM指令系统ARM指令系统,CMP 指令,CMP 指令的格式 CMP 条件 操作数1,操作数2 CMP 指令用于把一个寄存器的內容和另一个寄存器的內容,或立即数进行比较。同时更新 CPSR 中条件标志位的值。 该指令进行一次減法运算,但不

11、保存结果,只更改条件标志位。 程序范例 CMP R1, R0;将寄存器R1 的值与寄存器 R0 的值相减,并根据结果设定 CPSR 的标志位 CMP R1, #100;将寄存器 R1 的值与立即数100相减,并根据结果设定 CPSR 的标志位,掩郧纶诛梅桥坷恤拱帮虑阿单筒疵又图锨省串邵羌焦狠良葱靖腥若黄娱太ARM指令系统ARM指令系统,CMN 指令,CMN 指令的格式 CMN 条件 操作数1,操作数2 CMN指令用于把一个寄存器的內容和另一个寄存器的內容,或立即数进行比较。同时更新 CPSR 中条件标志位的值。 该指令实际完成操作数1与操作数2相加,并根据结果更改CPSR中的条件标志位。更改條

12、件旗標位元。 程序范例 CMN R1, R0;将寄存器R1 的值与寄存器 R0 的值相加,并根据结果设定 CPSR 的标志位 CMN R1, #100;将寄存器 R1 的值与立即数100相加,并根据结果设定 CPSR 的标志位,荆施破傅彬割秀黍烯皖鼓肝旅嘘啼厚酝湛炔偿初滦炳弱溉汝濒尹斜炔鞘睦ARM指令系统ARM指令系统,TST 指令,TST 指令的格式 TST 条件 操作数1,操作数2 TST 指令用于把一个寄存器的內容和另一个寄存器的內容,或立即數进行每一位的 AND 运算,并根据结果修改CPSR中的条件标志位。 操作数1是要测试的数据,而操作数2是一个位屏蔽数,该指令一般用来检测是否设定了

13、特殊位。 程序范例 TST R1, #%1;用于测试在寄存器 R1 中是否设定了最低位元(%表示二进制数) TST R1, #oxffe;将寄存器 R1 的值与立即数 0 xffe 按位AND 运算,并根据结果设定 CPSR中的条件标志位,锹粤瘟嘿搬瘟遭镣析平澄校塞娜契螺楷葬彻凋盯狭笛铂彤玲页公捧碗扬豹ARM指令系统ARM指令系统,TEQ 指令,TEQ 指令的格式 TEQ 条件 操作数1,操作数2 TEQ 指令用于把一个寄存器的內容和另一个寄存器的內容,或立即数进行每一位的 XOR 运算,并根据结果更新 CPSR 中条件标志位的值。 该指令通常用于比较操作数1和操作数2是否相等。 程序范例 T

14、EQ R1, R2;寄存器R1 的值与寄存器 R2 的值执行XOR 运算,并根据结果来设定 CPSR 中的条件标志位,公针翔啃毋订涛萤阅饲麻未与侗睦翱轴矗坪烬西园悲昆败犹弟商芥誉鹊浊ARM指令系统ARM指令系统,ADD 指令,ADD 指令的格式 ADD 条件 S 目的寄存器,操作数1,操作数2 ADD 指令用于把两个操作数相加,并将结果值存放到目的寄存器中。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数 程序范例 ADD R0, R1, R2; R0 = R1 + R2 ADD R0, R1, #256; R0 = R1 + 256 ADD R0, R2,

15、R3, LSL#1; R0 = R2 + (R3 1),祟储掘跑层收亿舵揩遏猎妨厕祟坷坑胀碌迸水垂朗支清钳认豹篆书咒封轰ARM指令系统ARM指令系统,ADC 指令,ADC 指令的格式 ADC 条件 S 目的寄存器,操作数1,操作数2 ADC指令用于把两个操作数相加,再加上 CPSR 中的 C 条件标志位,并将结果值存放到目的寄存器中。它使用了进位标志,可以执行比32位数还要大的数值加法。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数 程序范例: 完成两个128位数的加法 ADDS R0, R4, R8; 加最低端的字 ADCS R1, R5, R9; 加第二

16、个字,包含进位 ADCS R2, R6, R10;加第三个字,包含进位 ADC R3, R7, R11;加第四个字,包含进位,浆绕爹烃粒尾垫君产沟挑蔑美乒龙智搬瘩鲁擒纶玻届蚌例识陇笆申造渴仆ARM指令系统ARM指令系统,SUB 指令,SUB 指令的格式 SUB 条件 S 目的寄存器,操作数1,操作数2 SUB 指令用于把操作数1減去操作数2,并将结果值存放到目的寄存器中。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例 SUB R0, R1, R2; R0 = R1 R2 SUB R0, R1, #256; R0 = R1 256 SUB R0,

17、R2, R3, LSL#1; R0 = R2 (R3 1),裁肥裳膨沮为淹泥睫沂绘贮诉惯混孩必蛀烧霍码茵乎券欢洛黔肪来晰获钦ARM指令系统ARM指令系统,SBC 指令,SBC 指令的格式 SBC 条件 S 目的寄存器,操作数1,操作数2 SBC指令用于把操作数1減去操作数2 ,再减去 CPSR 中的 C 条件标志位的反码,并结果值存放到目的寄存器中。它使用了进位标志表示借位,可以执行大于32位的减法。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例 SUBS R0, R1, R2; R0 = R1 R2 !C,并根据结果来设定CPSR 中条件标志位

18、的值。,剧卜脑辫军淄耀穗钵骏窖瘤擂粕锌秦妇靡涯叔枫沮掂两柠远掠癸籍佯棕证ARM指令系统ARM指令系统,RSB 指令,RSB 指令的格式 RSB 条件 S 目的寄存器,操作数1,操作数2 RSB 指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果值存放到目的寄存器中。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例 RSB R0, R1, R2; R0 = R2 R1 RSB R0, R1, #256; R0 = 256 R1 RSB R0, R2, R3, LSL#1; R0 = (R3 1) R2,颗辉劝粥擂役额捂腹燥撩脆侈羔祈驼屠圭眶死

19、岸许授讼咯慑态取痕曼趾促ARM指令系统ARM指令系统,RSC 指令,RSC 指令的格式 RSC 条件 S 目的寄存器,操作数1,操作数2 RSC 指令用于把操作数2减去操作数1,再減去 CPSR 中的 C 条件标志位的反码,并将结果值存放到目的寄存器中。它使用了进位标志表示借位,可以执行大于32位的减法。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例: RSC R0, R1, R2; R0 = R2 R1 !C,并根据结果来设定CPSR 中条件标志位的值。,越翌牵究亲殉凭拔咒继发役潭苗零挎创勇万月探冬磺龙赛胺诌栗赂疵炮域ARM指令系统ARM指令系

20、统,AND 指令,AND 指令的格式 AND 条件 S 目的寄存器,操作数1,操作数2 AND 指令用于在两个操作数上进行逻辑AND运算,并将结果值存放到目的寄存器中。该指令常用于屏蔽操作数1的某些位。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例: AND R0, R0, #3; 该指令保持 R0 的第0与1位,其余位清除,俯陈垒酮宣腕益骄弦邓汰鲜晓韵卧蝎阑猿缉劈滚窿杂变噪恰率锭嫁迫透焦ARM指令系统ARM指令系统,ORR 指令,ORR 指令的格式 ORR 条件 S 目的寄存器,操作数1,操作数2 ORR 指令用于在两个操作数上进行逻辑 OR

21、运算,并将结果值存放到目的寄存器中。该指令常用于设置操作数1的某些位。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数 程序范例: ORR R0, R0, #3; 该指令设置 R 0 的第0与1位,其余位保持不变,帝伦协邹装鸽穗母殖屈朱牲答舆墨过撇医蔡娱硝凹该狙悼掠拭焕淄曼估扼ARM指令系统ARM指令系统,EOR指令,EOR 指令的格式 EOR 条件 S 目的寄存器,操作数1,操作数2 EOR 指令用于在两个操作数上进行逻辑XOR 运算,并将结果值存放到目的寄存器中。该指令常用于反转操作数1的某些位。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的

22、寄存器,或是一个立即数。 程序范例: EOR R0, R0, #3; 该指令翻转R0 的第0与1位,其余位保持不变,斩寡斩肺柬锭狭午屡挪赦汲友贾蚌盘彤君雕泅谍柜范欺弯酿淆狗裕扇在闷ARM指令系统ARM指令系统,BIC 指令,BIC 指令的格式 BIC 条件 S 目的寄存器,操作数1,操作数2 BIC 指令用于清除操作数1的某些位,并将结果值存放到目的寄存器中。该指令常用于清除操作数1的某些位。 操作数1应是一个寄存器,操作数2可以是一个寄存器、被移位的寄存器,或是一个立即数。 程序范例: BIC R0, R0, #%1011; 该指令清除 R0 的第0、1与3位元,其余位保持不变,恒捷族熔雄鞭

23、峦斑肘谢泪舒荧搏汞耙蔑俏遇升呆北肇鲜胞麓铣渍必腕讼哭ARM指令系统ARM指令系统,乘法指令与乘加指令,支持的乘法指令与乘加指令共有 6 个,可分为运算结果为 32位与 64 位等两种类型。 MUL:32 位元乘法指令 MLA: 32 位元乘加指令 SMULL 64: 64 位有符号数乘法指令 SMLAL 64: 64 位有符号数乘加指令 UMULL 64: 64 位无符号数乘法指令 UMLAL 64: 64 位无符号乘加指令,注1:与数据处理指令不同的是,指令中所有操作数与目的寄存器必须为通用寄存器,且不能对操作数使用立即数或被移位的寄存器。 注2: 目的寄存器和操作数1必须是不同的寄存器。,

24、妊盾右夕诧芬上芯杰澈遂图瑶良惰悔门粕廉葡菲蝶碧赵仙纽垃诸像硝澄越ARM指令系统ARM指令系统,MUL 指令,MUL 指令的格式 MUL 条件 S 目的寄存器,操作数1,操作数2 MUL 指令完成将操作数1与操作数2的乘法运算,并将结果值存放到目的寄存器中,并根据结果来更新 CPSR 中的条件标志位。 操作数1与操作数2均为 32 位的有符号数或无符号数。 程序范例: MULR0, R1, R2; R0 = R1 R2 MULS R0, R1, R2; R0 = R1 R2,同时设定 CPSR 中相应条件标志位,胖惫漳映池辰书耗滨腻苟访铃芍睫楞灭捞玲热爬钻鞭丁侨巡装部具汛叹胰ARM指令系统ARM

25、指令系统,MLA 指令,MLA 指令的格式 MLA 条件 S 目的寄存器,操作数1,操作数2 ,操作数3 MLA 指令完成将操作数1与操作数2的乘法运算,再将乘积加上操作数3,并将结果值存放到目的寄存器中,并根据结果来更新 CPSR 中的条件标志位。 操作数1、操作数2、操作数3均为 32 位的有符号数或无符号数。 程序范例: MLA R0, R1, R2, R3; R0 = R1 R2 + R3 MLAS R0, R1, R2, R3; R0 = R1 R2 + R3,同时设定 CPSR 中 相关条件标志位 MUL R1, R2, R3; R1 = R2 R3 MLAEQS R1, R2,

26、R3, R4; R1 = R2 R3 + R4,同时设定 CPSR 中 相关条件标志位,赌许卷彰哗遏姑奸戚佐卸炭惟抽遗硕弥蔬衣申梦郁氨场溅扫谨腮饰焙贪啮ARM指令系统ARM指令系统,SMULL 指令,SMULL 指令的格式 SMULL 条件 S 低目的寄存器 (RdLo),高目的寄存器 (RdHi),操作数1,操作数2 SMULL 指令完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到 RdLo 中,结果的高32位元放置到 RdHi 中,同时可以根据运算结果来设定 CPSR 中相应的条件标志位。 操作数1与操作数2均为32位的有符号数。 程序范例: SMULL R0, R1, R2,

27、 R3; R0 = (R2 R3) 的低32位 ; R1 = (R2 R3) 的高32位,岿类剔缘撞驴斤钾癌岭挖又咒懊寄簿贮忙吻会等抄禄穷端很弯蛾别烃稍在ARM指令系统ARM指令系统,SMLAL 指令,SMLAL 指令的格式 SMLAL 条件 S 低目的寄存器 (RdLo),高目的寄存器 (RdHi),操作数1,操作数2 SMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器 RdLo 的值相加后又放置到 RdLo 中,结果果的高32位同目的寄存器 RdHi 的值相加后又放置到 RdHi 中,同时可以根据运算结果来设定 CPSR 中相应的条件标志位。 操作数1与操作数

28、2均为32位的有符号数。 程序范例: SMLAL R0, R1, R2, R3; R0 = (R2 R3) 的低32位 +R0 ; R1 = (R2 R3) 的高32位 +R1,诞久礁匈乡士蔫脆挡格瓷欠秀傍思必奈捉缘闽蛇腰诧夯庭宜渐娩片欺刽孕ARM指令系统ARM指令系统,UMULL 指令,UMULL 指令的格式 UMULL 条件 S 低目的寄存器 (RdLo),高目的寄存器 (RdHi),操作数1,操作数2 UMULL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到 RdLo 中,结果的高32位放置到 RdHi 中,同时可以根据运算结果来设定 CPSR 中相应的条件标志位。 操

29、作数1与操作数2均为32位的无符号数。 程序范例: SMULL R0, R1, R2, R3; R0 = (R2 R3) 的低32位 ; R1 = (R2 R3) 的高32位,苔肖侮熙思甘勤俘伶份临和坠坞鼠绥卫弧倍您畸违笑爹罩废撕勃欣蚕胞诡ARM指令系统ARM指令系统,UMLAL 指令,UMLAL 指令的格式 UMLAL 条件 S 低目的寄存器 (RdLo),高目的寄存器 (RdHi),操作数1,操作数2 UMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器 RdLo 的值相加后又放置到 RdLo 中,结果果的高32位同目的寄存器 RdHi 的值相加后又放置到 Rd

30、Hi 中,同时可以根据运算结果来设定 CPSR 中相应的条件标志位。 操作数1与操作数2均为32位的无符号数。 程序范例: UMLAL R0, R1, R2, R3; R0 = (R2 R3) 的低32位 +R0 ; R1 = (R2 R3) 的高32位 +R1,韧斯奖沾垢咎汛渗殿血瞬蚕罕封贰湛网亮掘乳塞菏在黑谁讲喘瓷啦庄追倍ARM指令系统ARM指令系统,程序状态寄存器 (PSR) 存取指令,程序状态寄存器存取指令: 用于在程序状态寄存器和通用寄存器之间传送数据。 包括两种指令 MRS 存取指令: 程序状态寄存器到通用寄存器的数据传送指令 MSR 存取指令: 通用寄存器到程序状态寄存器的数据传

31、送指令,迹枉渭苹辅缅咱寝宰哎淑纲小毡宜厦栅刁永哑僻证膳撵攘骨糊圃熏撮灸篱ARM指令系统ARM指令系统,状态寄存器读指令,在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。,MRScond Rd,psr,MRS指令格式,指令对应编码,指令执行的条件码,目标寄存器,不能为R15,区别CPSR(为0)和SPSR(为1)寄存器,卷猛剥支剁平谱讣葛鸿柴映悔脱宾消日院伯损逸态敌宾六字袋滦曰放核焙ARM指令系统ARM指令系统,MRScond Rd,psr,MRS指令格式,应用示例: MR

32、S R1,CPSR; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR; 将SPSR状态寄存器读取,保存到R2中,仲恕束恭渡尤甸搽祁唱詹逸城疥纸侨仁涤啸瓜迢玲偿警古惺绝疥违愿撬答ARM指令系统ARM指令系统,状态寄存器写指令,在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。,MSRcond psr_fields,#immed_8r,MSR指令格式1,MSRcond psr_fields,Rm,MSR指令格式2,指令执行的条件

33、码,CPSR或SPSR,指定传送的区域,可以为以下字母(必须小写)的一个或者组合: c 控制域屏蔽字节(psr7.0) x 扩展域屏蔽字节(psr15.8) s 状态域屏蔽字节(psr23.16) f 标志域屏蔽字节(psr31.24),保存要传送到状态寄存器指定域数据的源寄存器,要传送到状态寄存器指定域的立即数,姨锈妊忠亲竣捅匹背曝卯编疵祥叠愿匈眼灌陪兰译趴沧民概匝俱拉枪统孔ARM指令系统ARM指令系统,(1),(2),(3),(4),在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换

34、处理器模式、或者允许/禁止IRQ/FIQ中断等。,应用示例1: ;子程序:使能IRQ中断 ENABLE_IRQ MRS R0, CPSR BIC R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR,应用示例2: ;子程序:禁能IRQ中断 DISABLE_IRQ MRS R0 CPSR ORR R0, R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR,1.将CPSR寄存器内容读出到R0;,2.修改对应于CPSR中的I控制位;,3.将修改后的值写回 CPSR寄存器的对应控制域;,4.返回上一层函数;,饮肌甸势帚棍匣支衰春酵魂慢瞥阿呀屏改胰钡翟拼郁接诸培娶迸

35、室女竿窥ARM指令系统ARM指令系统,单寄存器加载/存储指令,ARM 处理器支持加载/存储指令,用于寄存器和存储器之间传送数据,加载指令用于将存储器的数据传送到寄存器,存储指令则完成相反的动作。 常用的加载/存储指令 LDR字数据加载指令 STR字数据存储指令 LDRB字节数据加载指令 STRB字节数据存储指令 LDRH半字数据加载指令 STRH半字数据存储指令,滑萧免巫唾秘习智铆埔改代仑茬抚背食鸵芹荐沁瘦狞芜躲憾恤器梆吏散具ARM指令系统ARM指令系统,LDR 指令,LDR 指令的格式为: LDR 条件 目的寄存器,存储器地址 程序范例 LDR R0, R1 ;将存储器地址为R1 的字数据读

36、到 R0 LDR R0, R1, R2;将存储器地址为R1+R2 的字数据读到 R0 LDR R0, R1, #8 ;将存储器地址为R1+8 的字数据读到 R0 LDR R0, R1, R2 !;将存储器地址为R1+R2 的字数据读到 R0,并将新地址R1+R2 写入 R1 LDR R0, R1, #8 !;将存储器地址为R1+8 的字数据读到 R0,并将新地址R1+8 写入 R1 LDR R0, R1, R2 ;将存储器地址为R1 的字数据读到 R0, 并将新地址R1+R2 写入R1 LDR R0, R1, R2, LSL #2 !;将存储器地址为R1+R24 的字数据读到R0,并将新地址R

37、1+R24 写入R1 LDR R0, R1, R2, LSL #2;将存储器地址为R1 的字数据读到R0,并将新地址R1+R24 写入 R1,苹肇朗畜羞沼烫孪雅茄徐筷深溺干赫肌车卑瑰优喇闸冈亏补溜议盈重咋伺ARM指令系统ARM指令系统,STR 指令,STR 指令的格式为: STR 条件 源寄存器,存储器地址 程序范例 STR R0, R1, #8 ;将 R0 中的字数据写到到以 R1 +8为地址的存储器中,R1的内容不变 STR R0, R1, #8 !;将R0 中的字数据写到以 R1+8 为地址的存储器中,并将新地址R1+8 写入 R1,榔广糠罗雕汕扛掩塞净尽赐稻剪皋酗蹋陀闲动虑粗杆巨剂蛀伺

38、逼鸿屁灾廖ARM指令系统ARM指令系统,举例,LDR R8,R10 LDRNE R1,R5,#960! STR R2,R9,#consta-struc LDR R1,localdata LDR R0,R1 ,R2,LSL #2 LDRB R0,R2,#3 LDR R1,R0,-R2,LSL #2 STR R0, R7,# -8,R8 R10,(有条件地)R1R5+960,然后 R5R5+960,常量表达式,-40954095,加载一个字,该字位于标号Localdata所在位置,先将R1指向的内存单元的数据读入,再将R1 R1+R2x4,将R2+3中的字节数据读入R0,R0高24位置0,将R0-

39、R2x4处的数据读到R1中, R0,R2中的值不变,将R0的数据写入到R7位置,再R7 R7-8,察嗣慕勋写喧釉横锗球孙悼拙海诈辊舟那巍怠鸟断僻腻敏捣自械拭颈膘枫ARM指令系统ARM指令系统,多寄存器存取/加载指令,LDM/STM Rn! ,编号低的寄存器在存储数据或者加载数据时对应于存储器的低地址,著坠瘪曾抛绢溯西延扭筑阅屑推甥咒仕妮撤溯执糖裹牛人较寒吸摆骆匆贾ARM指令系统ARM指令系统,举例,LDMIA R1,R0,R2,R5 STMDB R1!,R3-R6,R11,R12 STMED SP!,R0-R7,LR,R0 R1 R2 R1+4 R5 R1+8,R1-4 R3 R1-8 R4

40、R1-12 R5 R1-16 R6 R1-20 R11 R1-24 R12 R1 R1-24,现场保存:将R0R7,LR入栈 R13 R0 R13-4 R1 。 R13 R13-36,溶抖传沿阳叉恍讹弯媳韧裂苏忍销攀援县芯孕如逝尝搜论酌同债份耪媚恤ARM指令系统ARM指令系统,SWP交换指令,在寄存器和存储器之间进行数据交换。使用SWP来实现信号量。 句法: SWP cond B Rd, Rm, Rn 其中:B 可选后缀。若有B,则交换字节;否则,交换32位字。 Rd ARM寄存器。数据从存储器加载到Rd。 Rm ARM寄存器。Rm的内容存储到存储器。Rm可以与Rd相同。 在这种情况下,寄存器

41、的内容与存储器的内容进行交换。 Rn ARM寄存器。Rn的内容指定要进行数据交换的存储器的 地址。Rn必须与Rd和Rm不同。,桔旬陶吧泻乞笑拎耀鞍织剃忿辣狭岸砧碧酚絮钦仆屁棘格四哭粘驭榨娥商ARM指令系统ARM指令系统,举例,SEMEQU0X10002000 WAIT_SEM MOVR0,#0 LDRR0,=SEM SWPR1,R1,R0;取出信号量 CMPR1,#0;判断是否有信号 BEQWAIT_SEM;若没有,继续等待,豪咋饼睦华破嵌斧胶著瘦壹扬奴情顽元傅逗扯韭澈秤肉扬挑忆汹幂钩僚鸵ARM指令系统ARM指令系统,软中断指令SWI,SWI指令用于产生软中断,从而实现在从户模式变换到管理模式

42、,并且将CPSR保存到管理模式的SPSR中,然后程序跳转到SWI异常入口。在其它模式下也可使用SWI指令,处理器同样地切换到管理模式。 该指令主要用于用户程序调用操作系统的系统服务,操作系统在SWI异常处理程序中进行相应的系统服务。,SWIcondimmed_24,SWI指令格式,SWI指令编码,指令执行的条件码,指令传递的参数(24位立即数),石腑进忻曙冻还店即缓我郊宫俯郴壮雍的戴怪瘪艇桨怜组昭袁挟绪佣体荒ARM指令系统ARM指令系统,根据SWI指令传递的参数SWI异常处理程序可以作出相应的处理。SWI指令传递参数有以下两种方法, 指令中的24位立即数指定了用户请求的服务类型,参数通过通用寄

43、存器传递。 MOV R0,#34;设置子功能号为34 SWI 12;调用12号软中断 指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的值决定,参数通过其它的通用寄存器传递。 MOV R0,#12;调用12号软中断 MOV R1,#34;设置子功能号为34 SWI 0,银绞仓负棒搓冤幼桑钩帽嗽活塘芋斑顿靳捧缕群叔雍伦塞谋翰免闺捣因慨ARM指令系统ARM指令系统,在SWI异常中断处理程序中,取出SWI指令中立即数的步骤为: 首先确定引起软中断的SWI指令是ARM指令还是Thumb指令,这可通过对SPSR访问得到; 然后取得该SWI指令的地址,这可通过访问LR寄存器得到; 接着读出该SW

44、I指令,分解出立即数。,SWI_Handler STMFD SP!, R0-R3, R12, LR; 现场保护 MRS R0, SPSR ; 读取SPSR STMFD SP!, R0 ; 保存SPSR TST R0, #0 x20 ; 测试T标志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,读取指令码(16位) BICNE R0, R0, #0 xFF00; 取得Thumb指令的8位立即数 LDREQ R0, LR,#-4 ; 若是ARM指令,读取指令码(32位) BICEQ R0, R0, #0 xFF000000 ; 取得ARM指令的24位立即数 . LDMFD SP!, R0-R3, R12, PC; SWI异常中断返回,犹瓤晰辨骑谴您剩井眺撅俐摧随味盆友咽十羞贞热群芳但愉低桅臂帆杭拙ARM指令系统ARM指令系统,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1