第3章ARM嵌入式处理器指令系统

上传人:人*** 文档编号:585580474 上传时间:2024-09-02 格式:PPT 页数:75 大小:1.04MB
返回 下载 相关 举报
第3章ARM嵌入式处理器指令系统_第1页
第1页 / 共75页
第3章ARM嵌入式处理器指令系统_第2页
第2页 / 共75页
第3章ARM嵌入式处理器指令系统_第3页
第3页 / 共75页
第3章ARM嵌入式处理器指令系统_第4页
第4页 / 共75页
第3章ARM嵌入式处理器指令系统_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《第3章ARM嵌入式处理器指令系统》由会员分享,可在线阅读,更多相关《第3章ARM嵌入式处理器指令系统(75页珍藏版)》请在金锄头文库上搜索。

1、第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3.1 ARM指令分类及指令格式指令分类及指令格式 3.2 ARM指令的寻址方式指令的寻址方式 3.3 ARM指令集指令集 3.4 Thumb指令集指令集 习题习题麻蚌缴旺邢鄂增舍投晕熄麓匿甸职乓仆递约框蚜幌梗秆珠盏倾慌柬儡见败第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-1第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 本章以流行本章以流行本章以流行本章以流行ARMARM处理器为例介绍嵌入式微处理处理器为例介绍嵌入式微处理处理器为例介绍

2、嵌入式微处理处理器为例介绍嵌入式微处理器的指令系统,包括器的指令系统,包括器的指令系统,包括器的指令系统,包括 ARM ARM处理器的指令格式分类、处理器的指令格式分类、处理器的指令格式分类、处理器的指令格式分类、指令格式、寻址方式、指令格式、寻址方式、指令格式、寻址方式、指令格式、寻址方式、3232位的位的位的位的ARMARM指令集和指令集和指令集和指令集和1616位的位的位的位的ThumbThumb指令集。指令集。指令集。指令集。 31 ARM指令分类及指令格式指令分类及指令格式卯且肥大莉撰桶租椿昭舶头梁中寄卤项案重法磕悠桂洋础轮寇妇苛厨泌疲第3章-ARM嵌入式处理器指令系统-第3章-AR

3、M嵌入式处理器指令系统-2第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3 31 1l ARMl ARM指令分类指令分类指令分类指令分类已玩蓬狙稿丝釜级狰寞卫撬绸初周剁睡悯勉昔寨啄摸盟篱走馆庞栈枢涛浦第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-3第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 周绞锡纤靴适宣姿内斜箍震疯姜予乞捷刨髓忘巴坑憋锹养瘁殿寇诵骸枢痞第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-4第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 渺朝滥需绎烽张新饵胡审桃瑚员逆娇岳哺蜕账绰芯邵探条燕磊

4、磊持酉萝涵第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-5第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 鸟邑秸如表鸦财榆纲沦赞约允栋攀滋粹嘘潍之哗少檄漆斯或哆柜终缩渴肛第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-6第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 牙仿仟要煽柬熬年油霉冬绞蛮汛璃务鹰问殖池勘革救演滨蚌助龄版愚哼俗第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-7第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1. 立即数符号立即数符号# “#”符号表示立即数,该符号后

5、的数据可以是二进制数,符号表示立即数,该符号后的数据可以是二进制数,也可以是十进制数或十六进制数,如果操作数为十进制数,也可以是十进制数或十六进制数,如果操作数为十进制数,则前面除了则前面除了#外,没有其他符号。外,没有其他符号。 2. 二进制符号二进制符号% %符号后面的数字表示二进制数,如符号后面的数字表示二进制数,如%10010101表示表示二进制数二进制数10010101,即十进制数,即十进制数149。 3. 二进制符号二进制符号2_ 2_符号是二进制前缀的另一种形式,如符号是二进制前缀的另一种形式,如2_10010101也表示二进制数也表示二进制数10010101,与,与%10010

6、101等效。等效。313 ARM指令中的操作数符号指令中的操作数符号扑整脓砚眶尹有长吵兑拆峪去链簧藉妮忽皿滁簿抹乘邢蜀僻漠腻啤鞠邵葵第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-8第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4. 十六进制符号十六进制符号0x 0x后面的数据表示十六进制数,如后面的数据表示十六进制数,如0xFFFF,表示十,表示十六进制数六进制数FFFF,即十进制数,即十进制数65535。 5 更新基址寄存器符号更新基址寄存器符号! !符号表示指令在完成操作后应将最后的地址写入基符号表示指令在完成操作后应将最后的地址写入基址寄存器。址寄

7、存器。 6. 复制复制SPSR到到CPSR符号符号“” “” 符号通常在批量数据存储指令中作为后缀放在寄存符号通常在批量数据存储指令中作为后缀放在寄存器之后。当其前面的寄存器不包含器之后。当其前面的寄存器不包含PC时,该符号表示所用的时,该符号表示所用的寄存器是用户模式的寄存器;当其前面的寄存器包含寄存器是用户模式的寄存器;当其前面的寄存器包含PC时该时该符号指示将符号指示将SPSR寄存器的值复制到寄存器的值复制到CPSR寄存器中。寄存器中。 7. 指示寄存器列表范围符号指示寄存器列表范围符号“-” -符号用于在有些指令中表示多个连续寄存器,即含符号用于在有些指令中表示多个连续寄存器,即含义义

8、从从到到。如。如RO-R7表表 示,示,R1,R2,R3,R4,R5,R6,R7这这8个寄存器。个寄存器。骗酶贡频巢骆柬询郭攀夜孤涤轿刨绞栽您子何剂挚岁犁冻衡产醇袁粹学讼第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-9第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM微处理器内嵌的桶型移位器微处理器内嵌的桶型移位器(Barrel Shifter),支持,支持数据的各种移位操作,但在数据的各种移位操作,但在 ARM指令集中没有单独的指令供指令集中没有单独的指令供移位操作使用。移位操作在汇编语言中表示为指令中的选项,移位操作使用。移位操作在汇编语言中表示为

9、指令中的选项,只能作为指令格式中的一个字段。如当数据处理指令的第只能作为指令格式中的一个字段。如当数据处理指令的第2个个操作数为寄存器时,就可以加入移位操作选项对它进行各种移操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。位操作。 移位操作包括逻辑左移移位操作包括逻辑左移(LSL)、算术左移、算术左移(ASL)、逻辑右移、逻辑右移(LSR)、算术右移、算术右移(ASR)、循环右移、循环右移(ROR)及带扩展的循环右移及带扩展的循环右移(RRX)共共6种类型。种类型。314 ARM指令中的移位操作指令中的移位操作眩虚货哆帅笛货柿蒂娇捷钧练瘪林史释棉周鹿必啊胸住麻贫兔党蜀溅铱斧第3章

10、-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-10第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1逻辑左移操作逻辑左移操作 格式:通用寄存器,格式:通用寄存器,LSL 立即数立即数 用途:对通用寄存器中的内容进行逻辑左移操作,按操作数所用途:对通用寄存器中的内容进行逻辑左移操作,按操作数所指定的数量向左移位,右端指定的数量向左移位,右端(低位低位)用零来填充。其中,操作数可用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是立即数的取值范围是03l之间的整数之间的整数)。 例如:例如:MOV

11、 R0, Rl , LSL# 2 ;将;将Rl中的内容算术左移中的内容算术左移2位后传送到位后传送到R0中中 2算术左移操作算术左移操作 格式:通用寄存器,格式:通用寄存器,ASL 操作数操作数 用途:用途:ASL表示对通用寄存器中的内容进行算术左移操作,按表示对通用寄存器中的内容进行算术左移操作,按操作数所指定的数量向左移位,右端操作数所指定的数量向左移位,右端(低位低位)用零来填充。其中,用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取立即数的取值范围是值范围是03l之间的整数之间的整数)。 LSL与与ASL效果相同

12、,可以互换。效果相同,可以互换。 例如:例如:MOV R0,R1,ASL#2 ;将;将R1中的内容算术左移中的内容算术左移2位位后传送到后传送到R0中中栗秧痢啃掸荤陕雕工窟叭媒胶矮计楞旷趋捅撬骏赤才萍掏蓄赵础吭茂盎哥第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-11第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3 逻辑右移操作逻辑右移操作 格式:通用寄存器,格式:通用寄存器,LSR 操作数操作数 用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端指定的数量向右移位,左端(高

13、位高位)用零来填充。其中,操作数可以用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数是通用寄存器中的数值,也可以是立即数(立即数的取值范围是立即数的取值范围是03l之间的整数之间的整数)。 例如:例如:MOV R0, R1, LSR# 2;将;将R1中的内容逻辑右移中的内容逻辑右移2位位后传送到后传送到R0中,左端用零来填充中,左端用零来填充 4算术右移操作算术右移操作 格式:通用寄存器,格式:通用寄存器,ASR 操作数操作数 用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端指定的数量向右移位,

14、左端(高位高位)用第用第31位的值(亦即符号位)来位的值(亦即符号位)来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是立即数的取值范围是03l之间的整数之间的整数)。 例如:例如:MOV R0, R1, ASR#2 ;将;将R1中的内容算术右移中的内容算术右移2位位后传送到后传送到R0中,左端用第中,左端用第31 位的值来填充位的值来填充守垮味处满畸筋郭蹄里秦项胸某松联蚜巴梆耐捐君寒手加两幽锭性詹眺荆第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-12第第3章章 ARM嵌入式处理器

15、指令系统嵌入式处理器指令系统 5循环右移操作循环右移操作 格式:通用寄存器,格式:通用寄存器,ROR 操作数操作数 用途:对通用寄存器中的内容进行循环右移操作,按操作数所用途:对通用寄存器中的内容进行循环右移操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范立即数的取值范围是围是03l之间的整数之间的整数)。当进行。当进行32位的循环右移操作时,通用寄存器位的循环右移操作时,通用寄存器中的值不改变。中的值不改变

16、。 例如:例如:MOV R0, R1 , ROR#2 ;将;将R1中的内容循环右移中的内容循环右移2位位后传送到后传送到R0中中 6带扩展的循环右移操作带扩展的循环右移操作 格式:通用寄存器,格式:通用寄存器,RRX 操作数操作数 用途:对通用寄存器中的内容进行带扩展的循环右移操作,按用途:对通用寄存器中的内容进行带扩展的循环右移操作,按操作数所指定操作数所指定 的数量向右循环移位,左端用进位标志位来填充。其的数量向右循环移位,左端用进位标志位来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的立即数的取值范围是取值范围是03

17、l之间的整数之间的整数)。 例如:例如:MOV R0, R1, RRX#2 ;将;将R1中的内容进行带扩展中的内容进行带扩展的循环右移的循环右移2位后传送到位后传送到R0中中谋待戌镇辐马胳七扎爷篆固而侍粤问坷漏搬沃茸代粤摇赘虹背蹦者畜程诛第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-13第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1立即寻址立即寻址 立即寻址也叫立即数寻址,是一种特殊的寻址方式。采立即寻址也叫立即数寻址,是一种特殊的寻址方式。采用立即寻址方式时,操作数本身就在指令中给出,只要取出用立即寻址方式时,操作数本身就在指令中给出,只要取出指令也

18、就取到了操作数,这个操作数被称为立即数。采用立指令也就取到了操作数,这个操作数被称为立即数。采用立即寻址方式的指令示例如下:即寻址方式的指令示例如下: MOV R0, # 0xl0FF66ED ADC R0 , R0 ,# 1000 ; R0R0 + 1000 + C 在以上在以上2条指令中,第条指令中,第2个源操作数即为立即数个源操作数即为立即数32 ARM指令的寻址方式指令的寻址方式 所谓寻址方式,就是处理器根据指令中给出的地址信息来寻所谓寻址方式,就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前找物理地址的方式。目前ARM指令系统支持的常见寻址方式有立指令系统支持的常见寻址方

19、式有立即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址、堆栈寻址及多寄存器寻址寻址、堆栈寻址及多寄存器寻址7种。种。321 ARM指令的寻址方式指令的寻址方式叮荔酵啥方徘盎祁侈棉尝莱吉德因茂苫萧拯搜趣奇受具逮仙谆委榷嵌郊究第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-14第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2寄存器寻址寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常址方式是各类微处理器经常

20、采用的一种方式,也是一种执行效采用的一种方式,也是一种执行效率较高的寻址方式。采用寄存器寻址方式的指令示例如下:率较高的寻址方式。采用寄存器寻址方式的指令示例如下: ADD R0, R 1 , R2 ; R0Rl + R2 3寄存器间接寻址寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器而操作数本身存放在存储器 中,用于间接寻址的寄存器必须用中,用于间接寻址的寄存器必须用方括号方括号括起来。采用寄存器间接寻址方式的指令示例如括起来。采用寄存器间接寻址方式的指令示例如下:下: ADD R0,Rl ,R2

21、;R0Rl + R2 LDR R0,R1 ;R0Rl STR R0, Rl ; RlR0雅湘绵荧做堡逻胚屯贵播犊能恒克房硕怨役渡瘁拢轰塌琐民蓖宏杆格啦鸵第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-15第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4基址加变址寻址基址加变址寻址 基址加变址寻址就是将寄存器基址加变址寻址就是将寄存器(该寄存器一般称作基址寄该寄存器一般称作基址寄存器存器)的内容与指令中给出的地址偏移量相加,从而得到一个操的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。基址加变址寻址方式常用于访问某地址附近作数的有效地址。基

22、址加变址寻址方式常用于访问某地址附近的地址单元。采用基址加变址寻址方式的指令有如下几种常见的地址单元。采用基址加变址寻址方式的指令有如下几种常见形式。形式。 (1)LDR R0, R1, # 4 ;R0Rl + 4 (2)LDR R0, R1, # 4! ; R0Rl + 4、RlRl + 4 该指令表示以寄存器该指令表示以寄存器Rl的值加上的值加上4作为操作数的有效地址,将取作为操作数的有效地址,将取得的操作数存入寄存器得的操作数存入寄存器R0中,然后再将寄存器中,然后再将寄存器Rl的值增加的值增加4。符号。符号!表示指令在完成数据传送后应该更新基址寄存器。表示指令在完成数据传送后应该更新基

23、址寄存器。 (3)LD R0,R1,#4 ;R0Rl 、RlRl + 4 该指令表示以寄存器该指令表示以寄存器Rl的值作为操作数的有效地址,将取得的操的值作为操作数的有效地址,将取得的操作数存入寄存器作数存入寄存器R0中,然后再将寄存器中,然后再将寄存器Rl的值增加的值增加4。 (4)LDR R0,Rl ,R2 ;R0Rl + R2 武径魏鞋豁吓钱搽站巴掷撼脂鼻谰镑著涸咎非衬贫蓑珐咳冤陡迫涟很骨听第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-16第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 5相对寻址相对寻址 相对寻址以程序计数器相对寻址以程序计数器(P

24、C)的当前值为基地址,以指令的当前值为基地址,以指令中的地址标号为偏移量,将两者相加之后的值作为操作数的中的地址标号为偏移量,将两者相加之后的值作为操作数的有效地址。以下程序段的作用是完成子程序的调用和返回,有效地址。以下程序段的作用是完成子程序的调用和返回,其中跳转指令其中跳转指令BL即采用了相对寻址方式。即采用了相对寻址方式。 BL Subroutine_ A ;跳转到子程序;跳转到子程序Subroutine_A处执行处执行 Subroutine A MOV PC, LR ;从子程序返回;从子程序返回 假设程序段中假设程序段中BL指令所在地址指令所在地址(PC值值)为为0x2100000,

25、 Subroutine_A对应偏移量为对应偏移量为0x0100,则转移到,则转移到Subroutine_A处对应的地址为处对应的地址为0x2100100,此地址在汇编时自动形成。,此地址在汇编时自动形成。像吝已廖蹿孔膝莫怔褒励毋攫闯冈夺手溜烈格浊衷引善石袒垮球村迹婪恢第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-17第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 6堆找寻址堆找寻址 堆栈是一种数据结构,按先进后出堆栈是一种数据结构,按先进后出(First In Last Out, FILO)的方式工作,使用一个称作堆栈指针的专用寄存的方式工作,使用一个称作

26、堆栈指针的专用寄存器指示当前的操作位置,堆核指针总是指向栈顶。器指示当前的操作位置,堆核指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack) ,而当堆栈指针指向下一个将要放人数据的,而当堆栈指针指向下一个将要放人数据的空位置时,称为空堆栈空位置时,称为空堆栈(Empty Stack)。 根据堆栈的生成方式,又可以分为递增堆栈根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈和递减堆栈(Decending Stack) ,当堆栈,当堆栈由低地址向高地址生成时,称为递增堆栈,当由高地

27、址向由低地址向高地址生成时,称为递增堆栈,当由高地址向低地址生成时,称为递减堆栈。低地址生成时,称为递减堆栈。 因此堆栈工作方式有因此堆栈工作方式有4种类型:种类型:(1)满递增堆栈;()满递增堆栈;(2)满递减堆栈;()满递减堆栈;(3)空递增堆栈:)空递增堆栈:(4)空递减堆栈。)空递减堆栈。菱缘冗是桶包值衙搞钮音基子豌覆伶镀潮踩淆眉哦腾贼御秀潭陶魁袱拯氛第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-18第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 7多寄存器寻址多寄存器寻址 多寄存器寻址又称块拷贝寻址,采用多寄存器寻址方多寄存器寻址又称块拷贝寻址,

28、采用多寄存器寻址方式可以用一条指令完成传送最多式可以用一条指令完成传送最多 16个通用寄存器的值。多个通用寄存器的值。多寄存器寻址是多寄存器传送指令寄存器寻址是多寄存器传送指令(LDM/STM)的寻址方式,的寻址方式, LDM/STM指令可以将存储器中的一个数据块加载到多个寄指令可以将存储器中的一个数据块加载到多个寄存器中,也可以将多个寄存器中的内容存储到存储器中。存器中,也可以将多个寄存器中的内容存储到存储器中。寻址操作中的寄存器可以是寻址操作中的寄存器可以是R0R15这这16个寄存器的子集或个寄存器的子集或全集。全集。LDM/STM指令依据后缀名的不同,其寻址方式有很指令依据后缀名的不同,

29、其寻址方式有很大区别。采用多寄存器寻址方式的指令示例如下:大区别。采用多寄存器寻址方式的指令示例如下: LDMIA R0, R1,R2,R3,R4 ;R1R0, R2R0十十4 ;R3R0 + 8,R4R0十十12 该指令的后缀该指令的后缀IA表示在每次执行完加载表示在每次执行完加载/存储操作后,存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送按字长度增加,因此,指令可将连续存储单元的值传送到到RlR4。毯姓崔缄栽普涧改署谢炬兵嗽熄哥惭除乃狭胃嗓席拾缚勿京恩俘刽又业潜第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-19第第3章章 ARM嵌入式处理器指令系

30、统嵌入式处理器指令系统 【例【例31】 欲将数据从源数据区欲将数据从源数据区snum复制到目标数据区复制到目标数据区dnum,数据的个数为,数据的个数为num,复制时以,复制时以8个字为单位进行,对个字为单位进行,对于最后所剩不足于最后所剩不足8个字的数据,以字为单位进行复制。用个字的数据,以字为单位进行复制。用ARM汇编语言设计实现该功能的程序,并分析该汇编语言设计实现该功能的程序,并分析该ARM程序的程序的详细执行过程和执行结果。详细执行过程和执行结果。 用用ARM汇编语言设计数据块复制程序的设计思想如下:汇编语言设计数据块复制程序的设计思想如下:先将源数据区的起始地址、目标数据区的起始地

31、址以及数据先将源数据区的起始地址、目标数据区的起始地址以及数据个数赋给选定的寄存器个数赋给选定的寄存器R0、R1、R2,再根据每次批量,再根据每次批量/单个单个复制数据的个数复制数据的个数R3,确定用于数据复制的中间寄存器,确定用于数据复制的中间寄存器R4-R11,之后先将源数据区的若干个数据批量装载到中间寄存器中,之后先将源数据区的若干个数据批量装载到中间寄存器中,再将中间寄存器的数据批量存储到目的数据存储区,随后进再将中间寄存器的数据批量存储到目的数据存储区,随后进行数据是否复制完毕的判断,若未复制完毕,修改有关操作行数据是否复制完毕的判断,若未复制完毕,修改有关操作数据地址,并重复前面的

32、数据复制操作,否者,终止操作,数据地址,并重复前面的数据复制操作,否者,终止操作,程序结束。程序结束。322 ARM指令的寻址方式应用举例指令的寻址方式应用举例氓旅崎蔷痴煽阵貉剿悸钧奖弦个鲁救纶授损牺害百候泵嚷谷拥幸袒皮凄洋第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-20第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 表表3.3 数据块复制程序执行前的有关数据和执行后的有关结果列表数据块复制程序执行前的有关数据和执行后的有关结果列表 范依皋邢丝纯昼曾灭猾助姆协郧哄磷腑昆扳尔沛椭次弃寇陪挎苑疼浓吻耕第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处

33、理器指令系统-21第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 友搭津侦丝堑根悼弃避蜂诽副侥锭脯拈素剧裳替唉躲伴么撵控伟睫券旁邵第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-22第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 此耸阂猪佳帐汰枷吨愈破网把轰赐桩雌浙白柠广抿世鲁粳胞梳蹭涕羚悍损第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-23第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM微处理器的指令集是加载微处理器的指令集是加载/存储型的,即指令集仅能存储型的,即指令集仅能处理寄存器中的数据,处理结

34、果仍要放回寄存器中,而对系统处理寄存器中的数据,处理结果仍要放回寄存器中,而对系统存储器的访问则需要通过专门的加载存储器的访问则需要通过专门的加载/存储指令来完成。本节存储指令来完成。本节将对将对ARM指令集的共指令集的共6大类指令进行详细的描述,并给出相应大类指令进行详细的描述,并给出相应例子。例子。331 数据处理指令数据处理指令 数据处理类指令可分为数据传送指令、算术逻辑运算指令数据处理类指令可分为数据传送指令、算术逻辑运算指令及比较指令等。其中数据传送指令用于在寄存器和存储器之间及比较指令等。其中数据传送指令用于在寄存器和存储器之间进行数据的双向传输;算术逻辑运算指令完成常用的算术与逻

35、进行数据的双向传输;算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新时更新CPSR中的相应条件标志位;比较指令不保存运算结果,中的相应条件标志位;比较指令不保存运算结果,只更新只更新CPSR中相应的条件标志位。中相应的条件标志位。 数据处理类指令见表数据处理类指令见表34。 33 ARM指令集指令集砰浇坟弥谗甜泽亨波峻拢们蕉锥佃獭败紧庄拌墒隅状橡瞄瞬逾肯圾蛀歉澜第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-24第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统

36、糕鸦排唆操荆垫连怜湍惭稻猴圈弗赌柏呕垦极稠春铰驹灭攀磨广蒲扁羡耍第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-25第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1数据传送指令数据传送指令 1)数据传送指令)数据传送指令 格式:格式:MOV条件条件 S目的寄存器,操作数目的寄存器,操作数 用途:用于将操作数传送到目的寄存器中。其中用途:用于将操作数传送到目的寄存器中。其中S决定指令的操决定指令的操作是否影响作是否影响CPSR中条件标志位的值,当没有中条件标志位的值,当没有S时指令不更新时指令不更新CPSR中条件标志位的值。例如:中条件标志位的值。例如: M

37、OV Rl,R0 ;将寄存器;将寄存器R0的值传送到寄存器的值传送到寄存器Rl MOV PC,R14 ;将寄存器;将寄存器R14的值传送到的值传送到PC,常用于子程序,常用于子程序返回返回 MOV Rl ,R0, LSL# 3 ;将寄存器;将寄存器R0的值左移的值左移3位后传送到位后传送到Rl 2)数据取反传送指令)数据取反传送指令 格式:格式:MVN条件条件S 目的寄存器,操作数目的寄存器,操作数 用途:用于将操作数按位取反后传送到目的寄存器中。其中用途:用于将操作数按位取反后传送到目的寄存器中。其中S决决定指令的操作是否影响定指令的操作是否影响CPSR中条件标志位的值,当没有中条件标志位的

38、值,当没有S时指令不时指令不更新更新CPSR中条件标志位的值。例如:中条件标志位的值。例如: MVN R0, # 0 ;笼坝府枉衍还狂遵娄坡匿尹卷腆泌教旦崖斤搅蹿求锡间努稿部腻搐放榴练第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-26第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2比较指令比较指令 1)比较指令)比较指令 格式:格式:CMP条件条件) 操作数操作数1,操作数,操作数2 用途:用于把用途:用于把2个操作数进行比较,同时更新个操作数进行比较,同时更新CPSR中条件标志中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标位的值。

39、该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数志位。标志位表示的是操作数1与操作数与操作数2的关系的关系(大、小、相等大、小、相等) ,如当操作数如当操作数1大于操作操作数大于操作操作数2,则此后的有,则此后的有GT后缀的指令将可以执后缀的指令将可以执行。行。 例如:例如:CMP Rl,R0 ;将;将Rl的值与的值与R0的值相减,并根据结果设的值相减,并根据结果设置置 CPSR的标志位的标志位 2)反值比较指令)反值比较指令 格式:格式:CMN条件条件) 操作数操作数1,操作数,操作数2 用途:用于用途:用于2个操作数分别取反后进行比较,同时更新个操作数分别取反后

40、进行比较,同时更新CPSR中中条件标志位的值。该指令实际完成操作数条件标志位的值。该指令实际完成操作数1和操作数和操作数2相加,并根据相加,并根据结果更改条件标志位。结果更改条件标志位。 例如:例如:CMN Rl,# 100 ;将;将Rl的值与立即数的值与立即数100相加,并根据相加,并根据结果设置结果设置CPSR 的标志位的标志位碱到佰戚痰滚逮改凝矫控漓仟辜戍怨仿气癣条谱帮藏痊徐铀魔毅揽眺抗祖第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-27第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3 测试指令测试指令 1)位测试指令)位测试指令 格式:格式:TS

41、T条件条件 操作数操作数1,操作数,操作数2 用途:用于把用途:用于把2个操作数进行按位的与运算,并根据运算结果更个操作数进行按位的与运算,并根据运算结果更新新CPSR中条件标志位的值。该指令通常用来检测是否设置了特定中条件标志位的值。该指令通常用来检测是否设置了特定的位,一般操作数的位,一般操作数1是要测试的数据,而操作数是要测试的数据,而操作数2是一个位掩码。是一个位掩码。 例如:例如:TST Rl, # % 1 ;将;将Rl的值与二进制数的值与二进制数1按位进行与运算,按位进行与运算,并根据结果设置并根据结果设置CPSR的标志位的标志位 TST Rl, # 0xFE ;将;将Rl的值与十

42、六进制数的值与十六进制数FE按位进行与运算,按位进行与运算,并据结果设置并据结果设置CPSR的标志位。的标志位。 2)相等测试指令)相等测试指令 格式:格式:TEQ条件条件 操作数操作数1,操作数,操作数2 用途:用于把用途:用于把2个操作数进行按位的异或运算,并根据运算结果个操作数进行按位的异或运算,并根据运算结果更新更新CPSR中条件标志位的值。该指令通常用于比较操作数中条件标志位的值。该指令通常用于比较操作数1和操作和操作数数2是否相等。是否相等。 例如:例如:TEQ Rl,R2 ;将;将Rl的值与的值与R2的值按位异或,并据结果的值按位异或,并据结果设置设置CPSR的标志位的标志位箭丸

43、兰盼皇响亲汀默埋蔡维尿囊缄慕嵌末绎桃浩鼎亥碉倾拦檄宛冠赫稀沸第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-28第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4 加法指令加法指令 1)加法指令)加法指令 格式:格式:ADD条件条件 S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:用途: 两个操作数相加,并将结果存放到目的寄存器中。操作数两个操作数相加,并将结果存放到目的寄存器中。操作数1应是应是一个寄存器,操作数一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或立即数。可以是一个寄存器,被移位的寄存器,或立即数。 例如:例如:AD

44、D R0,Rl, # 256 ; R0=Rl + 256 ADD R0,R2,R3,LSL# 1 ; R0= R2 + (R3 1) 2)带进位加法指令)带进位加法指令 格式:格式:ADC条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:两个操作数相加后,再加上用途:两个操作数相加后,再加上CPSR中条件标志位的值,并将结果中条件标志位的值,并将结果存放到目的寄存器中。由于该指令使用了进位标志位,因此可以做大于存放到目的寄存器中。由于该指令使用了进位标志位,因此可以做大于32位的数的加法。这时应注意不要忘记设置位的数的加法。这时应注意不要忘记设置S后缀来更改进位标志。

45、操作数要后缀来更改进位标志。操作数要求同上。例如两个求同上。例如两个128位数的加法如下:位数的加法如下: ADDS R0 ,R4, R8 ;加低端的字;加低端的字 ADCS Rl,R5,R9 ;加第二个字,带进位;加第二个字,带进位 ADCS R2 , R6, Rl 0 ;加第三个字,带进位;加第三个字,带进位 ADC R3, R7 , Rl1 ;加第四个字,带进位;加第四个字,带进位 孕嘎厕颠砾寝尖姨袜遮竟奶泥腋钳喂罐佃验嚣歧疡浓乓戊歇仓缔租夷萧澈第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-29第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 5 减法

46、指令减法指令 1)减法指令)减法指令 格式:格式:SUB条件条件 S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:操作数用途:操作数1减去操作数减去操作数2,并将结果存放到目的寄存器中。,并将结果存放到目的寄存器中。操作数操作数 1应是一个寄存器,操作数应是一个寄存器,操作数2可以是一个寄存器,被移位的可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。运算。 例如:例如:SUB R0,Rl ,R2 ; R0 = Rl - R2 SUB R0,Rl, # 256 ; R0=Rl

47、- 256 SUB R0,R2,R3, LSL # 1 ; R0 = R2 - (R31) 2)带借位减法指令)带借位减法指令 格式:格式:SBC条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:操作数用途:操作数1减去操作数减去操作数2,再减去,再减去CPSR中的条件标志位中的条件标志位C的反码,并将结果存放到目的寄存器中。操作数要求同上。由于该的反码,并将结果存放到目的寄存器中。操作数要求同上。由于该指令使用进位标志来表示借位,因此可以做大指令使用进位标志来表示借位,因此可以做大32位的数的减法,这位的数的减法,这时应注意不要忘记设置时应注意不要忘记设置S后缀来更

48、改进位标志。该指令可用于有符后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。号数或无符号数的减法运算。 例如:例如:SBCS R0,Rl ,R2 ; R0 = Rl - R2 - ! C房垒譬塞印臂赁匀悼藐捷皋磐为郧滇手实术粥佛甫判沽猩雇考赵磋穿夹蔽第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-30第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3)反向减法指令)反向减法指令 格式:格式:RSB条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:用操作数用途:用操作数2减去操作数减去操作数1,并将结果存放到目的寄存器中

49、。,并将结果存放到目的寄存器中。操作数的要求同上。该指令可用于有符号数或无符号数的减法运算。操作数的要求同上。该指令可用于有符号数或无符号数的减法运算。 例如:例如:RSB R0,Rl ,R2 ; R0= R2 - Rl RSB R0,Rl, #256 ; R0=256 - Rl RSB R0,R2,R3,LSL# 1 ; R0 = (R3 1) -R2 4)带借位反向减法指令)带借位反向减法指令 格式:格式:RSC条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:操作数用途:操作数2减去操作数减去操作数1,再减去,再减去CPSR中的条件标志位中的条件标志位C的的反码

50、,并将结果存放到目的寄存器中。操作数反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操应是一个寄存器,操作数作数2可以是一个寄存器,被移位的寄存器,或一个立即数。由于该可以是一个寄存器,被移位的寄存器,或一个立即数。由于该指令使用进位标志来表示借位,因此可以做大于指令使用进位标志来表示借位,因此可以做大于32位的数的减法,位的数的减法,这时应注意不要忘记设置这时应注意不要忘记设置S后缀来更改进位标志。该指令可用于有符后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。号数或无符号数的减法运算。 例如:例如:RSC R0,Rl,R2 ;R0=R2 Rl!C衣烛走畏绢俏镰耽股幌

51、多荒色呆象距绣副泼浆漱粗怂待瑟氧冈疾沧贵求峦第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-31第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 6 逻辑运算指令逻辑运算指令 1)逻辑与指令)逻辑与指令 格式:格式:AND条件条件 S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:对两个操作数进行逻辑与运算,并把结果放置到目用途:对两个操作数进行逻辑与运算,并把结果放置到目的寄存器中。操作数的寄存器中。操作数1应是一个寄存器,操作数应是一个寄存器,操作数2可以是一个寄可以是一个寄存器,被移位的寄存器,或一个立即数。存器,被移位的寄存器,或一个

52、立即数。 该指令常用于屏蔽操该指令常用于屏蔽操作数作数1的某些位。的某些位。 例如:例如:AND R0 , R0 , # 3 ;该指令保持;该指令保持R0的的0、1位,其余位清零位,其余位清零 2)逻辑或指令)逻辑或指令 格式:格式:ORR条件条件 S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:对两个操作数进行逻辑或运算,并把结果放置到目用途:对两个操作数进行逻辑或运算,并把结果放置到目的寄存器中。操作数要求同上。的寄存器中。操作数要求同上。 该指令常用于设置操作数该指令常用于设置操作数1的的某些位。某些位。 例如:例如:ORR R0 , R0 , # 3 ;该指令设置;

53、该指令设置R0的的0 、1位,其余位保持不变位,其余位保持不变 瞒算整麦嘲寻棋吮撰亨彼赂愧袋低抨跑酬吻侧生笑摊壤驭游入立律荐严乌第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-32第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3)逻辑异或指令)逻辑异或指令 格式:格式:EOR条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:对两个操作数进行逻辑异或运算,并把结果放置到用途:对两个操作数进行逻辑异或运算,并把结果放置到目的寄存器中。操作数要求同上。该指令常用于反转操作数目的寄存器中。操作数要求同上。该指令常用于反转操作数1的某些位。

54、的某些位。 例如:例如:EOR R0 , R0 , # 3 ;该指令反转;该指令反转R0的的0、1位,位,其余位保持不变其余位保持不变 4)位清除指令)位清除指令 格式:格式:BIC条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:用于清除操作数用途:用于清除操作数1的某些位,并把结果放置到目的的某些位,并把结果放置到目的寄存器中。操作数要求同上。操作数寄存器中。操作数要求同上。操作数2 为为32位的掩码,如果在位的掩码,如果在掩码中设置了某一位,则清除操作数掩码中设置了某一位,则清除操作数1中相应的位,其余保持中相应的位,其余保持不变。不变。 例如:例如:BIC R

55、0,R0,#%1011 ;该指令清除;该指令清除R0中的位中的位0 、1和和3,其余的位保持不变,其余的位保持不变 搔慎甚镭沧报善欧筷钵钎剁辅祭串旬复肋陪恕杉坤吐喀应魔玲柏芋陶迁明第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-33第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 7乘法指令与乘加指令乘法指令与乘加指令 ARM微处理器支持的乘法指令与乘加指令共有微处理器支持的乘法指令与乘加指令共有6条,按运条,按运算结果可分为算结果可分为32位和位和64位位2类,与前面的数据处理指令不同,类,与前面的数据处理指令不同,乘法指令与乘加指令中的所有操作数、目的寄存

56、器必须为通用乘法指令与乘加指令中的所有操作数、目的寄存器必须为通用寄存器,不能用立即数或被移位的寄存器作为操作数,同时,寄存器,不能用立即数或被移位的寄存器作为操作数,同时,目的寄存器和操作数目的寄存器和操作数1必须是不同的寄存器。必须是不同的寄存器。 1)32位乘法指令位乘法指令 格式:格式:MUL条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 用途:操作数用途:操作数1与操作数与操作数2的乘法运算,并把结果放置到目的乘法运算,并把结果放置到目的寄存器中,同时根据运算结果设置的寄存器中,同时根据运算结果设置CPSR中相应的条件标志中相应的条件标志位。其中,操作数位。其中

57、,操作数1和操作数和操作数2均为均为32位的有符号数或无符号数。位的有符号数或无符号数。 例如:例如:MUL R0,Rl,R2 ;R0= RlR2 MULS R0, Rl,R2 ;R0 = RlR2,同时设置,同时设置CPSR中的中的相关条件标志位相关条件标志位析由最题肠澜涩榜斯沥辱萄凤屋赚林邢伙蛮常筋琢轰珠域揖伤件访汞揣铁第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-34第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2) 32位乘加指令位乘加指令 格式:格式:MLA条件条件S 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2,操作数操作数3 用

58、途:首先操作数用途:首先操作数1与操作数与操作数2进行乘法运算,再将乘积加进行乘法运算,再将乘积加上操作数上操作数3,并把结果放置到目的寄存器中,同时根据运算结,并把结果放置到目的寄存器中,同时根据运算结果设置果设置CPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1和操作数和操作数2均为均为32位的有符号数或无符号数。位的有符号数或无符号数。 例如:例如:MLA R0,Rl,R2,R3 ;R0 = RlR2 + R3 MLAS R0,Rl,R2,R3 ;R0=RlR2 + R3,同时设置,同时设置CPSR中的相关条件标志位中的相关条件标志位 绅铆寻跨非穗瘟雇隐潍韩章坊瑟

59、跳曰搐蜕割糟毛刀涡桂甸猾回搜援照幕惫第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-35第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3)64位乘法指令位乘法指令 格式:格式:SMULL / UMULL 条件条件 S 目的寄存器目的寄存器Low,目的寄,目的寄存器存器High,操作数,操作数1,操作数,操作数2 用途:操作数用途:操作数1与操作数与操作数2进行乘法运算,并把结果的低进行乘法运算,并把结果的低32位放位放置到目的寄存器置到目的寄存器Low中,结果的高中,结果的高32位放置到目的寄存器位放置到目的寄存器High中,中,同时可以根据运算结果设置同

60、时可以根据运算结果设置CPSR中相应的条件标志位。其中,当操中相应的条件标志位。其中,当操作符为作符为SMULL,表示为,表示为64位有符号数乘法运算,操作数位有符号数乘法运算,操作数1和操作数和操作数2均为均为32位的有符号数;当操作符为位的有符号数;当操作符为UMULL时,表示为时,表示为64位无符号数位无符号数乘法运算,操作数乘法运算,操作数1和操作数和操作数2均为均为32位的无符号数。例如:位的无符号数。例如: SMULL R0,Rl,R2,R3 ;R0=(R2R3)的低的低32位,位,Rl=(R2R3)的高的高32位位 UMULL R0,Rl,R2,R3 ;R0 = (R2 R3)的

61、低的低32位;位;Rl=(R2 R3)的高的高32位位们隋软攻拨莎走柔搽柱薯紫镜抹颐烦豺土严咕亩狈忠糯藕腻极揉怜颗及枫第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-36第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4)64位乘加指令位乘加指令 格式:格式:SMLAL / UMLAL 条件条件S 目的寄存器目的寄存器Low,目的寄,目的寄存器存器High,操作数,操作数1,操作数,操作数2 用途:操作数用途:操作数1与操作数与操作数2进行乘法运算,并把结果的低进行乘法运算,并把结果的低32位同位同目的寄存器目的寄存器Low中的值相加后又放置到目的寄存器中的

62、值相加后又放置到目的寄存器Low中,结果的中,结果的高高32位同目的寄存器位同目的寄存器 High中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器High中,中,同时可以根据运算结果设置同时可以根据运算结果设置CPSR中相应的条件标志位。其中,当操中相应的条件标志位。其中,当操作符为作符为SMLAL时,表示为时,表示为64位有符号数乘加运算,操作数位有符号数乘加运算,操作数1和操作和操作数数2均为均为32位的有符号数;当操作符为位的有符号数;当操作符为/UMLAL时,表示为时,表示为64位无符号位无符号数乘加运算,操作数数乘加运算,操作数1和操作数和操作数2均为均为32位的无符号数

63、。位的无符号数。 对于目的寄存器对于目的寄存器Low,在指令执行前存放,在指令执行前存放64位加数的低位加数的低32位,位,指令执行后存放结果的低指令执行后存放结果的低32位;对于目的寄存器位;对于目的寄存器High,在指令执行,在指令执行前存放前存放64位加数的高位加数的高32位,指令执行后存放结果的高位,指令执行后存放结果的高32位。位。 例如:例如:SMLAL R0,Rl,R2,R3 ;R0 = (R2 x R3)的低的低32位位+ R0,Rl = (R2 x R3)的高的高32位位+ Rl UMLAL R0,Rl,R2,R3 ;R0 = (R2R3)的低的低32位位+ R0 ,Rl =

64、 (R2 x R3)的高的高32位位+ Rl疑倡止艺呸廊湘祁私刨姨愈骇脏瘩奥部居寥夯历愤瞬逾窃塔戎仪女阳静玲第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-37第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM微处理器支持程序状态寄存器访问指令,用于在程序状态微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,包括程序状态寄存器到通用寄寄存器和通用寄存器之间传送数据,包括程序状态寄存器到通用寄存器的数据传送指令存器的数据传送指令(MRS)和通用寄存器到程序状态寄存器的数据传和通用寄存器到程序状态寄存器的数据传送指令送指令(M

65、SR)两条。两条。 1 程序状态寄存器到通用寄存器的数据传送指令程序状态寄存器到通用寄存器的数据传送指令 格式:格式:MRS条件条件 通用寄存器,程序状态寄存器通用寄存器,程序状态寄存器(CPSR或或SPSR) 用途:将程序状态寄存器的内容传送到通用寄存器中。当需要用途:将程序状态寄存器的内容传送到通用寄存器中。当需要改变程序改变程序 状态寄存器的内容时,可用状态寄存器的内容时,可用MRS指令将程序状态寄存器的指令将程序状态寄存器的内容读入通用寄存器,修改后再内容读入通用寄存器,修改后再 写回程序状态寄存器;当在异常处写回程序状态寄存器;当在异常处理或进程切换时,需要保存程序状态寄存器的值,可

66、先用理或进程切换时,需要保存程序状态寄存器的值,可先用 MRS指令指令读出程序状态寄存器的值,然后保存。读出程序状态寄存器的值,然后保存。 例如:例如:MRS R0, CPSR ;传送;传送CPSR的内容到的内容到R0 MRS R0, SPSR ;传送;传送SPSR的内容到的内容到R0332 程序状态寄存器访问指令程序状态寄存器访问指令搔舅荆亢惫孵坏酣洞仓盯臀满缀泼斩奈败惺街度致窥悼娱坍大袍紧着鲍提第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-38第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2 通用寄存器到程序状态寄存器的数据传送指令通用寄存器到程序状

67、态寄存器的数据传送指令 格式:格式:MSR条件条件 程序状态寄存器程序状态寄存器(CPSR或或SPSR)_ ,操作,操作数数 用途:将操作数的内容传送到程序状态寄存器的特定域中,操用途:将操作数的内容传送到程序状态寄存器的特定域中,操作数可以为通用寄存器或立即数。选项作数可以为通用寄存器或立即数。选项用于设置程序状态寄存用于设置程序状态寄存器中需要操作的位,器中需要操作的位,32位的程序状态寄存器可分为位的程序状态寄存器可分为4个域:个域: 位位(3124)为条件标志位域,用为条件标志位域,用f表示;表示; 位位(2316)为状态位域,用为状态位域,用s表示;表示; 位位(158)为扩展位域,

68、用为扩展位域,用x表示;表示; 位位(70)为控制位域,为控制位域,用用c表示。表示。MSR指令通常用于恢复或改变程序状态寄存器的内容,在指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在使用时,一般要在MSR指令中指明将要操作的域。指令中指明将要操作的域。 例如:例如:MSR CPSR,R0 ;传送;传送R0的内容到的内容到CPSR MSR SPSR,R0 ;传送;传送R0的内容到的内容到SPSR MSR CPSR _c, R0 ;传送;传送R0的内容到的内容到SPSR,但仅修改,但仅修改CPSR中的控制位域中的控制位域禁侩奋哄有梨材囱修漓申窜制槛瞒扭毯叭屏蹈凝嘿码迄贤桥条闭谚央

69、搅畸第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-39第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 程序分支指令用于实现程序流程的跳转,在程序分支指令用于实现程序流程的跳转,在ARM程序中程序中可以使用专门的跳转指令,也可以通过直接向程序计数器可以使用专门的跳转指令,也可以通过直接向程序计数器PC写入跳转地址值写入跳转地址值(这在基于这在基于80X86的系统中是不可以的的系统中是不可以的)的方法的方法 实现程序流程的转移。实现程序流程的转移。 通过向程序计数器通过向程序计数器(PC)写入跳转地址值,便可在写入跳转地址值,便可在4GB的的地址空间中任意跳转

70、;若在跳转之前结合使用地址空间中任意跳转;若在跳转之前结合使用MOV LR,PC等指令,便可保存将来的返回地址值,从而实现在等指令,便可保存将来的返回地址值,从而实现在4GB连续连续的线性地址空间的子程序调用。的线性地址空间的子程序调用。 ARM指令集中的程序分支指令可以完成从当前指令向前指令集中的程序分支指令可以完成从当前指令向前或向后的或向后的32MB的地址空间的跳转,包括转移指令的地址空间的跳转,包括转移指令B、带返回、带返回的转移指令的转移指令BL、带返回且带状态切换的转移指令、带返回且带状态切换的转移指令(BLX)及带及带状态切换的转移指令状态切换的转移指令(BX)4条。条。333

71、程序程序分支指令程序程序分支指令琢半踞瘴暖晦难侗崖迭疆筋固庆睦园叹醛伍仟奴以饶笨寝贮附娠背契串殖第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-40第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1转移指令转移指令 格式:格式:B条件条件 目标地址目标地址 用途:立即跳转到给定的目标地址,从那里继续执行。用途:立即跳转到给定的目标地址,从那里继续执行。如如B Label表示程序元条件跳转到标号表示程序元条件跳转到标号Label处执行。处执行。 注意存注意存储在跳转指令中的实际值是相对当前储在跳转指令中的实际值是相对当前PC值的一个偏移量,值的一个偏移量,而不

72、是一个绝对地址,它的值由汇编器来计算。它是而不是一个绝对地址,它的值由汇编器来计算。它是24位有位有符号数,左移两位后有符号扩展为符号数,左移两位后有符号扩展为32 位,表示的有效偏移位,表示的有效偏移为为26位位(前后前后32MB的地址空间的地址空间)。B指令是最简单的跳转指指令是最简单的跳转指令。令。 例如:例如:CMP R1, # 0 ;将寄存器;将寄存器R1的值减去立即数的值减去立即数0,并根据结果设置,并根据结果设置CSPR的标志位。的标志位。 BEQ Label ;带条件等于;带条件等于EQ的转移,即当的转移,即当CPSR寄存器寄存器中的标志位中的标志位Z 置位时,程序跳转到标号置

73、位时,程序跳转到标号Label处执行处执行弓殖缨困危恋魂格栏格窥制穗沧膏酌颠嘉琉裂呼繁仪鸥奏民宅泻对莫邦药第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-41第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2 带状态切换的转移指令带状态切换的转移指令 格式:格式:BX条件条件 用途:跳转到指令中所指定的由寄存器用途:跳转到指令中所指定的由寄存器Rn同同0xFFFFFFFE进行与运算后的结果指示的目标地址进行与运算后的结果指示的目标地址(即即Rn中的最低位并不作为目标地址,而是作为状态切换位中的最低位并不作为目标地址,而是作为状态切换位) ,目标地址处的指令既

74、可以是目标地址处的指令既可以是ARM指令,也可以是指令,也可以是Thumb指令。如果指令。如果Rn中的最低位为中的最低位为1,则指令将,则指令将CPSR的的T标志置标志置为为1,且将目标地址的代码解释为,且将目标地址的代码解释为Thumb(状态切换到状态切换到Thumb指令集指令集)。 例如:例如: MOV R6,# 0x12000001 BX R6 ;转换到地址为;转换到地址为0x12000000处的处的Thumb指令指令宝驰骆勒砚俏侮藕轨窍翻垄靴俭伎纳豹奠鉴戏圾倍睦呐案掖孤怎颧吻猎剐第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-42第第3章章 ARM嵌入式处理器指

75、令系统嵌入式处理器指令系统 3 带返回的转移指令带返回的转移指令 格式:格式:BL条件条件 目标地址目标地址 用途:用途:BL是带返回的跳转指令,在跳转之前,会在寄是带返回的跳转指令,在跳转之前,会在寄存器存器R14中保存中保存PC的当前值。因此,可以通过将的当前值。因此,可以通过将R14的内容的内容重新加载到重新加载到PC中,来返回到跳转指令之后的那个指令处执中,来返回到跳转指令之后的那个指令处执行。行。 该指令是实现子程序调用的一个基本且常用的手段。该指令是实现子程序调用的一个基本且常用的手段。 例如:例如:BL Label;程序无条件跳转到标号;程序无条件跳转到标号Label处执行处执行

76、时,同时将当前时,同时将当前PC值保存到值保存到R14中中 钒赁涉站奥父炊醚坯咬陆膏犯父杜墟艘甭域位荚夫缔夏枪有税濒珠僚赔钝第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-43第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4 带返回且带状态切换的转移指令带返回且带状态切换的转移指令 格式:格式: BLX目标地址;目标地址; BLXcond 用途:使用格式用途:使用格式的的BLX指令从指令从ARM指令集跳转到指令中所指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由指定的目标地址,并将处理器的工作状态由ARM状态切换到状态切换到Thumb状态,该指令

77、同时将程序计数器状态,该指令同时将程序计数器(PC)的当前内容保存到寄的当前内容保存到寄存器存器R14中。因此,当子程序使用中。因此,当子程序使用Thumb指令集,而调用者使用指令集,而调用者使用ARM指令集时,可以通过指令集时,可以通过BLX指令实现子程序的调用和处理器工指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器作状态的切换。同时,子程序的返回可以通过将寄存器R14值复制值复制到到PC中来完成。使用格式中来完成。使用格式时不能带条件。使用格式时不能带条件。使用格式 时可以有时可以有条件,但目标地址只能是寄存器,当条件,但目标地址只能是寄存器,当Rn的最低位

78、是的最低位是1时,除了转时,除了转移到指令中所指定的由寄存器移到指令中所指定的由寄存器Rn同同0xFFFFFFE进行与运算后的结进行与运算后的结果指示的目标地址处外,还将自动切换到果指示的目标地址处外,还将自动切换到Thumb指令集。例如:指令集。例如: BLX LabelA ;程序转移到;程序转移到LabelA处且切换成处且切换成Thumb状态状态 BLXNE R5 ;程序转移到;程序转移到R5 & 0xFFFFFFFE处且切换到处且切换到Thumb状态状态磐谱翻赊敦析蠢旁骂属慕惨茂阔烂唾孔洁车匪啥僵拉羡辊浙焙捶坤常萄闺第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-

79、44第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM微处理器支持加载微处理器支持加载/存储指令,用于在寄存器和存存储指令,用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。寄存器,存储指令则完成相反的操作。 加载存储指令可分为:单一数据加载加载存储指令可分为:单一数据加载/存储指令、批量存储指令、批量数据加载数据加载/存储指令以及数据交换指令存储指令以及数据交换指令3类。类。 1 单一数据加载单一数据加载/存储指令存储指令 单一数据加载单一数据加载/存储指令包括字数据加载指

80、令存储指令包括字数据加载指令(LDR)、字、字节数据加载指令节数据加载指令(LDRB)、半字数据加载指令、半字数据加载指令(LDRH)、字数据、字数据存储指令存储指令(STR)、字节数据存储指令、字节数据存储指令(STRB)及半字数据存储及半字数据存储指令指令(STRH)。334 加载加载/存储指令存储指令询囊膀路傻夯蛀绰娟友沥片漏亥蛋瞳滓焊群让菱稠帮凰枣戍摄眷桥谗惹刺第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-45第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1)字数据加载指令)字数据加载指令 格式:格式:LDR条件条件 目的寄存器,目的寄存器, 用

81、途:用于从存储器中将一个用途:用于从存储器中将一个32位的字数据传送到目的位的字数据传送到目的寄存器中。该指令是常用于从存储器中读取寄存器中。该指令是常用于从存储器中读取32位的字数据到位的字数据到通用寄存器,然后对数据进行处理。当程序计数器通用寄存器,然后对数据进行处理。当程序计数器(PC)作为作为目的寄存器时,指令从存储器中读取的字数据被当作目的地目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样。较常用,且寻址方式灵活多样。 例如:例如: LDR R0,R1

82、 ;将存储器地址为;将存储器地址为Rl的字数据读入寄的字数据读入寄存器存器R0 LDR R0,Rl,R2 ;将存储器地址为;将存储器地址为Rl+R2的字数据的字数据读入寄存器读入寄存器R0 ; 茂黄腆桐费冲骤篡徐蹬秒没肥识糕韦勤今企庭白维绍绎核挫哄肘省腹感游第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-46第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 LDR R0,R1,R2,LSL # 2 ;将存储器地址为;将存储器地址为Rl 的字数的字数据读入寄存器据读入寄存器 R0,并将新地址,并将新地址Rl + R24写入写入Rl LDR R0,Rl,# 8 ;

83、将存储器地址为;将存储器地址为Rl+8的字数据读的字数据读入寄存器入寄存器R0 LDR R0,Rl,R2! ;将存储器地址为;将存储器地址为Rl+R2的字数据的字数据读入寄存器读入寄存器R0,并将新地址,并将新地址R1+R2写入写入R1 LDR R0,Rl,# 8! ;将存储器地址为;将存储器地址为Rl + 8的字数的字数据读入寄存器据读入寄存器R0,并将新地址,并将新地址Rl + 8写入写入Rl LDR R0,Rl,R2 ;将存储器地址为;将存储器地址为Rl的字数据读的字数据读入寄存器入寄存器R0,并将新地址,并将新地址Rl十十R2写入写入Rl LDR R0,R1,R2,LSL # 2 !

84、;将存储器地址为;将存储器地址为Rl + R24的字数据读入的字数据读入R0,并将新地址,并将新地址Rl + R24写入写入Rl亭独梁缠博亏甭烧秋昼躯务绍氛释研嘶控醚馈勘筒溅示巨逝飘雨患穗承嘿第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-47第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2)字节数据加载指令)字节数据加载指令 格式:格式:LDR条件条件B 目的寄存器,目的寄存器, 用途:从存储器中将一个用途:从存储器中将一个8位的字节数据传送到目的寄位的字节数据传送到目的寄存器中,同时将寄存器的高存器中,同时将寄存器的高24位清零。该指令通常用于从存位清

85、零。该指令通常用于从存储器中读取储器中读取8位的字节数据到通用寄存器,然后对数据进行位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器处理。当程序计数器(PC)作为目的寄存器时,指令从存储器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。跳转。 例如:例如: LDRB R0,Rl ;将存储器地址为;将存储器地址为Rl的字节数据读的字节数据读入寄存器入寄存器R0,并将,并将R0的高的高24位清零位清零 LDRB R0,Rl,# 8 ;将存储器地址为;将存储器地址为Rl + 8的字节的字节数据读入寄

86、存器数据读入寄存器R0,并将,并将R0的高的高24位清零位清零后圭爪波六厩棺呢烛浮惺沼控疾汹泽原蕴婿郊秦仲挝赔潍训还享这九汪喉第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-48第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3)半字数据加载指令)半字数据加载指令 格式:格式:LDR条件条件H 目的寄存器,目的寄存器, 用途:从存储器中将一个用途:从存储器中将一个16位的半字数据传送到目的寄位的半字数据传送到目的寄存器中,同时将寄存器的高存器中,同时将寄存器的高16位清零。该指令通常用于从存位清零。该指令通常用于从存储器中读取储器中读取16位的半字数据到通用

87、寄存器,然后对数据进行位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器处理。当程序计数器(PC)作为目的寄存器时,指令从存储器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。例如:跳转。例如: LDRH R0,Rl ;将存储器地址为;将存储器地址为Rl的半字数据读的半字数据读入寄存器入寄存器R0,并将,并将R0的高的高16清零清零 LDRH R0,Rl,# 8 ;将存储器地址为;将存储器地址为Rl8的半字的半字数据读入寄存器数据读入寄存器R0,并将,并将R0的高的高16位清零位清零 LDRH

88、R0,Rl,R2 ;将存储器地址为;将存储器地址为RlR2的半字的半字数据读入寄存器数据读入寄存器R0,并将,并将R0的高的高16位清零位清零拔锚师违啮来昧昔壁楞镶寝将默批赔疆羌兹变介伺沿钾胀江抡笨燥握泡闹第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-49第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4)字数据存储指令)字数据存储指令 格式:格式:STR条件条件 源寄存器,源寄存器, 用途:从源寄存器中将一个用途:从源寄存器中将一个32位的字数据传送到存储器中。该位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参指令在

89、程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令考指令LDR。例如:。例如: STR R0,R1,#8 ;将;将R0中的字数据写入以中的字数据写入以Rl为地址的存储为地址的存储器中,并将新地址器中,并将新地址 Rl + 8写入写入Rl STR R0,R 1,# 8 ;将;将R0中的字数据写入以中的字数据写入以Rl + 8为地址的为地址的存储器中存储器中 5)字节数据存储指令)字节数据存储指令 格式:格式:STR条件条件B 源寄存器,源寄存器, 用途:将源寄存器中位于低用途:将源寄存器中位于低8位的字节数据传送到存储器中。位的字节数据传送到存储器中。 例如:例如:STRB R0,Rl

90、;将寄存器;将寄存器R0中的字节数据写入以中的字节数据写入以Rl为地址的存储器中为地址的存储器中 STRB R0,Rl,# 8 ;将寄存器;将寄存器R0中的字节数据写入以中的字节数据写入以Rl + 8为地址的存储器中为地址的存储器中 句恿挝淤氢尽撞戌哮阀惹归锤刊宋丰含矮厅咽擎崎罚姐阿钨潦助毛剐崇诈第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-50第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 6)半字数据存储指令)半字数据存储指令 格式:格式:STR条件条件H 源寄存器,源寄存器, 用途:从源寄存器中将一个用途:从源寄存器中将一个16位的半字数据传送到存储

91、位的半字数据传送到存储器中。该半字数据为源寄存器中的低器中。该半字数据为源寄存器中的低16位。例如:位。例如: STRH R0,Rl ;将寄存器;将寄存器R0中的半字数据写入以中的半字数据写入以Rl为地址的存储器中为地址的存储器中 STRH R0,Rl,# 8 ;将寄存器;将寄存器R0中的半字数据写入中的半字数据写入以以Rl + 8为地址的存储器中为地址的存储器中 2 批量数据加载批量数据加载/存储指令存储指令 ARM微处理器所支持批量数据加载微处理器所支持批量数据加载/存储指令,可以一次存储指令,可以一次在连续的存储器单元和多个存储器之间传送数据,批量加载在连续的存储器单元和多个存储器之间传

92、送数据,批量加载指令用于将连续的存储器单元中的数据传送到多个寄存器,指令用于将连续的存储器单元中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。批量数据存储指令则完成相反的操作。 常用的加载常用的加载/存储指令有批量数据加载指令(存储指令有批量数据加载指令(LDM)及批)及批量数据存储指令(量数据存储指令(STM)。)。尼腕垛膘寸皿姨签锗颠套诡锭少涂撅刑合凰趴蛀免蜘常寞侨裙盔柳酞菜碴第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-51第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1)批量数据加载指令)批量数据加载指令 格式:格式:LDM条件条件类

93、型类型 基址寄存器基址寄存器!,寄存器列表,寄存器列表 用途:将有基址寄存器所指示的一片连续寄存器到寄存器列表用途:将有基址寄存器所指示的一片连续寄存器到寄存器列表所指示的多个寄存器中,该指令的常见用途是将多个寄存器的内所指示的多个寄存器中,该指令的常见用途是将多个寄存器的内容出栈。容出栈。 格式中,格式中,类型类型为可选后缀,通常有以下几种情况:为可选后缀,通常有以下几种情况: IA每次传送后的地址加每次传送后的地址加1;IB每次传送前的地址加每次传送前的地址加1;DA每每次传送后的地址减次传送后的地址减1;DB每次传送前的地址减每次传送前的地址减1;FD满递满递减堆栈;减堆栈;ED空递减堆

94、栈;空递减堆栈;FA满递增堆栈;满递增堆栈;EA空递空递增堆栈。增堆栈。 !为可选后缀,若选用该后缀,则当数据传送完毕之后,将为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。最后的地址写入基址寄存器,否则基址寄存器的内容不改变。 基址寄存器不允许为基址寄存器不允许为R15,寄存器列表可为,寄存器列表可为R0R15的任意组的任意组合。合。擂财俯型奠绥吃咬字池网冈晨擦褪貉愉唤扁焉姜豁栖阳草赐疚蓖裂俭碧外第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-52第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 为可选

95、后缀,当指令为为可选后缀,当指令为LDM且寄存器列表中包含且寄存器列表中包含R15,选,选用该后缀时表示:除了正常的数据传送之外,还将用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到复制到CPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器。同时,该后缀还表示传入或传出的是用户模式下的寄存器。 例如:例如:LDMFD R13!,!,R0,R4-R12,PC ;将由;将由R13指示指示的堆栈内容恢复到寄存器的堆栈内容恢复到寄存器R0、R4R12及程序计数器(及程序计数器(PC)中)中 2)批量数据存储指令)批量数据存储指令 格式:格式:STM条件条件类型类型 基址寄存器基址寄存

96、器 ! ,寄存器列表,寄存器列表 用途:将寄存器列表所指示的多个寄存器的数据存储到由基用途:将寄存器列表所指示的多个寄存器的数据存储到由基址寄存器所指示的连续存储器中,该指令的常见用途是将多个寄址寄存器所指示的连续存储器中,该指令的常见用途是将多个寄存器的内容入栈。其可选后缀的含义与存器的内容入栈。其可选后缀的含义与LDM指令的相同。指令的相同。 例如:例如:STMFD R13! ,R0,R4-R12,LR ;将寄存器;将寄存器R0,R4到到R12以及以及LR的值存入由的值存入由R13 指示的堆栈中指示的堆栈中票衙涸被无管汕质冒华奸登祟有菌矿矩浩衔裳秋啼蛊眩朋荔奋筷吧耸擞灶第3章-ARM嵌入式

97、处理器指令系统-第3章-ARM嵌入式处理器指令系统-53第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3 数据交换指令数据交换指令 ARM微处理器所支持数据交换指令能在存储器和寄存器之间微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有字数据交换指令交换数据。数据交换指令有字数据交换指令(SWP)和字节数据交换和字节数据交换指令指令(SWPB)两条。两条。 1)字数据交换指令)字数据交换指令 格式:格式:SWP条件条件 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2 用途:将源寄存器用途:将源寄存器2所指向的存储器中的字数据传送到目的寄所指向

98、的存储器中的字数据传送到目的寄存器中,存器中, 同时将源寄存器同时将源寄存器1中的字数据传送到源寄存器中的字数据传送到源寄存器2所指向的所指向的存储器中。显然,当源寄存器存储器中。显然,当源寄存器1和目的寄存器为同一个寄存器时,和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。指令交换该寄存器和存储器的内容。 例如:例如:SWP R0,Rl,R2 ;将;将R2所指向的存储器中的字数所指向的存储器中的字数据传送到据传送到R0,同时将,同时将Rl中的字数据传送到中的字数据传送到R2所指向的存储单元所指向的存储单元 SWP R0,R0,Rl ;该指令完成将;该指令完成将Rl所指向的存储器

99、中的所指向的存储器中的字数据与字数据与R0中的字数据交换中的字数据交换好害吨漱砰耐采芳嘴窒叛绥竿柯谐靴贼买甸尹骨角傣特号令侨烘恃亦芳房第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-54第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2)字节数据交换指令)字节数据交换指令 格式:格式:SWP条件条件B 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存源寄存器器2 用途:将源寄存器用途:将源寄存器2所指向的存储器中的字节数据传送所指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高到目的寄存器中,目的寄存器的高24位清零,同时将源寄存位清零,同时将源寄

100、存器器1中的字节数据传送到源寄存器中的字节数据传送到源寄存器2所指向的存储器中。显然,所指向的存储器中。显然,当源寄存器当源寄存器1和目的寄存器为同一个寄存器时,交换寄存器和目的寄存器为同一个寄存器时,交换寄存器和存储器的内容。和存储器的内容。 例如:例如:SWPB R0,Rl,R2 ; 将将R2所指向的存储器中所指向的存储器中的字节数据传送到的字节数据传送到R0,R0的高的高24位清零,同时将位清零,同时将Rl中的低中的低8位数据传送到位数据传送到R2所指向的存储单元所指向的存储单元 SWPB R0,R0,R1 ; 该指令完成将该指令完成将Rl所指向的存储所指向的存储器中的字节数据与器中的字

101、节数据与R0中的低中的低8位数据交换位数据交换仗票志兜坐涵痘山侮橙巍孪蠕汾圆哮耿眠接生付奄懂婆诱郧歌趋爪聘丛茧第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-55第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM微处理器可支持多达微处理器可支持多达16个协处理器,用于各种协处理操个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处作,在程序执行的过程中,每个协处理器只执行针对自身的协处理器指令,忽略理器指令,忽略ARM处理器和其他协处理器的指令。处理器和其他协处理器的指令。 ARM的协处理器指令主要用于的协处理器指令主要用

102、于ARM处理器初始化处理器初始化ARM协处协处理器的数据处理操作、理器的数据处理操作、 在在ARM处理器的寄存器和协处理器的寄存处理器的寄存器和协处理器的寄存器之间传送数据以及在器之间传送数据以及在ARM协处理器的寄存器和存储器之间传送协处理器的寄存器和存储器之间传送数据。数据。 ARM协处理器指令包括协处理器数操作指令协处理器指令包括协处理器数操作指令(CDP)、协处理、协处理器数据加载指令器数据加载指令(LDC)、 协处理器数据存储指令协处理器数据存储指令(STC)、ARM处理处理器寄存器到协处理器寄存器的数据传送指令器寄存器到协处理器寄存器的数据传送指令 (MCR)及协处理器寄及协处理器

103、寄存器到存器到ARM处理器寄存器的数据传送指令处理器寄存器的数据传送指令(MRC)共共5条。条。335 协处理器指令协处理器指令防辕宣盏懂敢厄酵奠兔耗屯猎始茁厌豫李谷趋肉攻匹维泰淳轩彭壬坦贿龟第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-56第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1. 协处理器数操作指令协处理器数操作指令 格式:格式:CDP条件条件 协处理器编号,操作码协处理器编号,操作码1,目的寄存,目的寄存器,源寄存器器,源寄存器1,源寄存器,源寄存器2,操作码,操作码2 用途:通知用途:通知ARM协处理器执行特定的操作,若协处理协处理器执行

104、特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中器不能成功完成特定的操作,则产生未定义指令异常。其中操作码操作码1和操作码和操作码2为协处理器将要执行的操作,目的寄存器为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器。和源寄存器均为协处理器的寄存器。 例如:例如:CDP P2,5,C12,Cl0,C3,4 ;该指令完成协;该指令完成协处理器处理器P2的初始化即让协处理器的初始化即让协处理器P2在在Cl 0,C3上执行操作上执行操作5和和4,并将结果存入,并将结果存入C12中中佳痊滦瑰轨沃掂耘险启谎引呢轨叹声绿亭淋实夷尝氟索目骆陈撵售闰簧蚌第3章-ARM

105、嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-57第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2协处理器数据加载指令协处理器数据加载指令 格式:格式:LDC条件条件L 协处理器编码,目的寄存器,协处理器编码,目的寄存器, 源寄存器源寄存器 用途:将源寄存器所指向的存储器中的字数据传送到目用途:将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若的寄存器中,若 协处理器不能成功完成传送操作,则产生未协处理器不能成功完成传送操作,则产生未定义指令异常。其中,定义指令异常。其中,L选项表示指令为长读选项表示指令为长读 取操作,如取操作,如用于双精度数据的传输。用于双精

106、度数据的传输。 例如:例如:LDC P5,C3,R0 ;将;将ARM处理器的寄存器处理器的寄存器R0所指向的存储器中的字数据传送到协处理器所指向的存储器中的字数据传送到协处理器P5的寄存器的寄存器C3中中讽脆阵瞻勇宾榴兄越荒音雪柱宽彪杖景崖选踪炯焰假眷肖拯递布症獭铆但第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-58第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 3协处理器数据存储指令协处理器数据存储指令 格式:格式:STC条件条件L 协处理器编码,源寄存器,协处理器编码,源寄存器,目的目的寄存器寄存器 用途:将源寄存器中的字数据传送到目的寄存器所指向用途

107、:将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,定义指令异常。其中,L选项表示指令为长读取操作,如选项表示指令为长读取操作,如用于双精度数据的传输。用于双精度数据的传输。 例如:例如:STC P3,C4,R0;将协处理器;将协处理器P3的寄存器的寄存器C4中的字数据传送到中的字数据传送到ARM处理器的寄存器处理器的寄存器R0所指向的存储器所指向的存储器中中 累坪笆亡捷罢豹蚊亲剥邀恒丛宽稽捣舵姐暴厦激上上跪沽瘤淡核金锻馋让第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式

108、处理器指令系统-59第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 4 处理器寄存器到协处理器寄存器的数据传送指令处理器寄存器到协处理器寄存器的数据传送指令 格式:格式:MCR条件条件协处理器编号,操作码协处理器编号,操作码1,源寄存器,源寄存器,目的寄存器目的寄存器1,目的寄存器,目的寄存器2,操作码,操作码2 用途:将用途:将ARM处理器寄存器中的数据传送到协处理器处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码令异常。其中协处理器操作码1和协处理器操作码和协处理

109、器操作码2为协处理为协处理器将要执行的操作,源寄存器为器将要执行的操作,源寄存器为ARM处理器的寄存器,目处理器的寄存器,目的寄存器的寄存器1和目的寄存器和目的寄存器2均为协处理器的寄存器。均为协处理器的寄存器。 例如:例如:MCR P3,3,R0,C4 ,C5 ,6 ;该指令将;该指令将ARM处理器寄存器处理器寄存器R0中的数据传送到协处理器中的数据传送到协处理器P3的寄存器的寄存器C4和和C5中。中。拈烤惜嘉熊遂介弛家迄哦矗麦敬站寂阑醉带巢柄聪撂醋斡兑洁押拭氧太畔第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-60第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指

110、令系统 5. 协处理器寄存器到协处理器寄存器到ARM处理器寄存器的数据传送指令处理器寄存器的数据传送指令 格式:格式:MRC条件条件协处理器编号,操作码协处理器编号,操作码1,目的寄存器,目的寄存器,源寄存器源寄存器1,源寄存器,源寄存器2,操作码,操作码2 用途:将协处理器寄存器中的数据传送到用途:将协处理器寄存器中的数据传送到ARM处理器寄处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码常。其中协处理器操作码1和协处理器操作码和协处理器操作码2为协处理器将要为协处理器将要执行的操作,目的寄存器为执行的

111、操作,目的寄存器为ARM处理器的寄存器,源寄存器处理器的寄存器,源寄存器1和源寄存器和源寄存器2均为协处理器的寄存器。均为协处理器的寄存器。 例如:例如:MRC P3, 3 , R0 , C4 , C5 ,6 ;该指令将协;该指令将协处理器处理器P3的寄存器中的数据传送到的寄存器中的数据传送到ARM 处理器寄存器中处理器寄存器中冀骏系拿僚载篡恰侮僚惦卞落告巢明口翻波杏彪雏畏钉巷跌石疽哼铅瓣缓第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-61第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1软件中断指令软件中断指令 格式:格式:SWI条件条件 24位的立即数

112、位的立即数 用途:产生软件中断,以使用户程序能调用操作系统的系统用途:产生软件中断,以使用户程序能调用操作系统的系统例程。操作系统在软件中断指令的异常处理程序中提供相应的系例程。操作系统在软件中断指令的异常处理程序中提供相应的系统服务,指令中统服务,指令中24位的立即数指定用户程序调用系统例程的类型,位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中相关参数通过通用寄存器传递,当指令中24位的立即数被忽略时,位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器用户程序调用系统例程的类型由通用寄存器R0的内容决定,同时,的内容决定,同时,参数通过其它通用寄存器传

113、递。参数通过其它通用寄存器传递。 例如:例如:SWI 0x01 ;该指令调用操作系统编号为;该指令调用操作系统编号为01的系统例程的系统例程 2断点中断指令断点中断指令 格式:格式:BKPT 16位的立即数位的立即数 用途:产生软件断点中断,可用于程序的调试。用途:产生软件断点中断,可用于程序的调试。16位立即数位立即数用于保存软件调用中额外的断点信息。用于保存软件调用中额外的断点信息。 例如:例如:KPT 0xF010336 异常中断指令异常中断指令轧沸了锗嘱玖泰值票指痹悍恨忧苗鸥捻遍陛强油骤稀邪四蔑校姑往龟埔范第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-62第第

114、3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 ARM体系结构除了支持执行效率很高的体系结构除了支持执行效率很高的32位位ARM指令集以指令集以外,为兼容数据总线宽度为外,为兼容数据总线宽度为16位的应用系统,也支持位的应用系统,也支持16位的位的Thumb指令集。指令集。Thumb指令集是指令集是ARM指令系统的一个子集,允许指令系统的一个子集,允许指令编码的长度为指令编码的长度为16位。与等价的位。与等价的32位代码相比较,位代码相比较,Thumb指令指令集在保留集在保留32位代码优势的同时,大大的节省了系统的存储空间。位代码优势的同时,大大的节省了系统的存储空间。 所有的所有的T

115、humb指令都有对应的指令都有对应的ARM指令,而且指令,而且Thumb的编程的编程模型也对应于模型也对应于ARM 的编程模型,在应用程序的编写过程中,只要的编程模型,在应用程序的编写过程中,只要遵循一定调用的规则,遵循一定调用的规则, Thumb子程序和子程序和ARM 子程序就可以互相子程序就可以互相调用。调用。 虽然虽然Thumb指令集中的数据处理指令的操作数仍然是指令集中的数据处理指令的操作数仍然是32位,位,指令地址也是指令地址也是32位,但位,但 Thumb指令集为实现指令集为实现16位的指令长度,舍位的指令长度,舍弃了弃了ARM指令集的一些特性,如大多数的指令集的一些特性,如大多数

116、的Thumb指令是无条件执指令是无条件执行的,而几乎所有的行的,而几乎所有的ARM指令都是有条件执行的;大多数的指令都是有条件执行的;大多数的Thumb 数据处理指令的目的寄存器与其中一个源寄存器相同。数据处理指令的目的寄存器与其中一个源寄存器相同。34 Thumb指令集指令集揩仰辈恩擒菊窍鹿忆酞横廖轻豹宽蚊诲踞遏葱钢翰枢细谬择些邹肆铰鼎盆第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-63第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 大部分大部分Thumb数据处理类指令采用数据处理类指令采用2地址格式,操作结地址格式,操作结果放入其中一个操作数寄存器。果

117、放入其中一个操作数寄存器。Thumb状态下的寄存器结构状态下的寄存器结构特点决定了除特点决定了除MOV和和ADD外的其它指令只能访问外的其它指令只能访问R0R7寄寄存器。如果指令的操作数包含存器。如果指令的操作数包含R8R15,则指令的执行不更,则指令的执行不更新新CPSR中的状态参数位,其它情况更新中的状态参数位,其它情况更新CPSR状态位。状态位。341 数据处理指令数据处理指令育获撮雏谴余粮絮噪惹吁撇吾邦崎警毕会况靛喳黑讣荷派撩卢隐俩词喂李第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-64第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 义声汁宁鼠涅声

118、咨磷滑箭跳山航嗅周剖挝示缕账讨萨鞠崔安只皿便驾映伏第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-65第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 则砍废汐歹敷画尖骤矾碎屎阵蔓钻腻哄舒暖价阴敞驰酋扣爽挨划斧航憋春第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-66第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 342 程序程序分支指令程序程序分支指令刻仍米峨轮魂素肪徽颇灯潭列派印牵享僳哎理迈适脱纶争拔烘迭团袋变铀第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-67第第3章章 ARM嵌入式处理器指令

119、系统嵌入式处理器指令系统 与与ARM指令集中的程序分支指令相比,指令集中的程序分支指令相比,Thumb指令集指令集中的程序分支指令跳转的范围有较大限制,除了中的程序分支指令跳转的范围有较大限制,除了B指令有条指令有条件执行功能外,其他程序分支指令均不带条件执行。件执行功能外,其他程序分支指令均不带条件执行。Thumb程序分支指令共有带条件的转移指令程序分支指令共有带条件的转移指令(B)、带链接的转移指、带链接的转移指令令(BL)、带状态切换的转移指令、带状态切换的转移指令(BX)及带链接和切换的转移及带链接和切换的转移指令指令(BLX) 4条,其中条,其中BLX指令仅限于具有指令仅限于具有V5

120、T架构的架构的ARM处理器使用。处理器使用。 Thumb程序分支指令及其功能见表程序分支指令及其功能见表36。 程序分支指令的典型用法有以下三种:(程序分支指令的典型用法有以下三种:(1)短距离条)短距离条件程序分支指令可用于控制循环的退出;(件程序分支指令可用于控制循环的退出;(2)中等距离无)中等距离无条件程序分支指令可用于实现类似于条件程序分支指令可用于实现类似于GOTO功能;(功能;(3)长)长距离条件程序分支指令可用于子程序调用。距离条件程序分支指令可用于子程序调用。 坠绑诱挤佃苑秃明缠铭砖韦输役账捂暗绿闹堂申较仰雇映垣郭卖狞副酸尖第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌

121、入式处理器指令系统-68第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 由于由于Thumb指令的长度为指令的长度为16位,即只用位,即只用ARM指令一半的位数指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的来实现同样的功能,所以,要实现特定的程序功能,所需的Thumb指令的条数较指令的条数较ARM指令多。在一般的情况下,指令多。在一般的情况下,Thumb指令指令与与ARM指令的时间效率和空间效率关系如下:指令的时间效率和空间效率关系如下:Thumb代码所需的代码所需的存储空间约为存储空间约为ARM代码的代码的60%70% ; Thumb代码使用的指令代码使用的指令

122、数比数比ARM代码多约代码多约30%40% ;若使用;若使用32位的存储器,位的存储器,ARM代代码比码比Thumb代码快约代码快约40% ;若使用;若使用16位的存储器,位的存储器,Thumb代码比代码比ARM代码快约代码快约40%50% ;与;与ARM代码相比较,使用代码相比较,使用Thumb代代码,存储器的功耗会降低约码,存储器的功耗会降低约30%。 显然,显然,ARM指令集和指令集和Thumb指令集各有其优点,若对系统的指令集各有其优点,若对系统的性能有较高要求,应使用性能有较高要求,应使用 32位的存储系统和位的存储系统和ARM指令集,若对系指令集,若对系统的成本及功耗有较高要求,则

123、应使用统的成本及功耗有较高要求,则应使用16位的存储系统和位的存储系统和Thumb指令集。当然,若能将二者结合使用,充分发挥其各自的优点,指令集。当然,若能将二者结合使用,充分发挥其各自的优点,则会取得更好的效果。则会取得更好的效果。庄寡肖牢脯即喂搁缕替胚摩沃找驹他螺倪舒黍紊营筛蹈问碳终犊杀胃臭催第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-69第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 在在Thumb指令集中,由于寄存器结构的限制,大部分加指令集中,由于寄存器结构的限制,大部分加载载/存储指令只能访问存储指令只能访问R0R7 寄存器,此外堆栈操作指令

124、与寄存器,此外堆栈操作指令与ARM指令集中的不同。指令集中的不同。343 加载加载/存储指令存储指令亮同驮虫婉肢稳姥菱硒雅遵貌靶灼象级始摹亩禁篇铅贫畏信挡笑斤烧咆尉第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-70第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 畅嫌苇吧酚求氧忌申玩扰维蕾锗均绥阜靶海论鼓肛腮顾拇早癣题洁幢房哺第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-71第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 杨守禹囤辑梅钒奶疚动谤圆趴蹲约厉贱完很柒本零耐谋掇秀鄂辊晕痹寿蹋第3章-ARM嵌入式处理器指令系统-

125、第3章-ARM嵌入式处理器指令系统-72第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 Thumb指令集中的异常中断指令有软件中断指令及断点指令集中的异常中断指令有软件中断指令及断点异常中断指令两条。异常中断指令两条。 1软件中断指令软件中断指令 格式:格式:SWI imm_8 ;imm_8为为8位立即数,为中断号位立即数,为中断号(0256) 用途:引起用途:引起SWI异常中断,处理器自动切换到异常中断,处理器自动切换到ARM状态状态且处理器切换到管理模式,同时且处理器切换到管理模式,同时CPSR保存到管理模式中的保存到管理模式中的SPSR中,执行转移到中,执行转移到SWI向量地

126、址。例如:向量地址。例如: SWI 09 2断点中断指令断点中断指令 格式:格式:BKPT imm_8 用途:使处理器进入调试模式。用途:使处理器进入调试模式。 例如:例如:BKPT 50344 异常中断指令异常中断指令套远厘峰蕴淬某失旋婪娩稳宛译洽笔绕傍苹问搂厢弦夸旋瓦诽毗邢弥移吊第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-73第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 1说明表说明表38中各指令操作完成的功能。中各指令操作完成的功能。习习 题题 3类传锋囊耕稳鸳纱庐鬃荒涵摇处喜僻怎邯阑魔碌炼爽茬壹村烙去利翰商亭第3章-ARM嵌入式处理器指令系统-

127、第3章-ARM嵌入式处理器指令系统-74第第3章章 ARM嵌入式处理器指令系统嵌入式处理器指令系统 2简述简述ARM的寻址方式,并分别举例进行说明。的寻址方式,并分别举例进行说明。 3试比较试比较TST与与ANDS,CMP与与SUBS,MOV与与MVN的区别。的区别。 4已知已知R13等于等于0x8800,R0、R1、R2的值分别为的值分别为0x01、0x01、0x03,试说明执行指令,试说明执行指令STMFD R13!,R0-R2后,寄存器和存储器后,寄存器和存储器内容如何变化?内容如何变化? 5用汇编编写实现下列功能的程序段,令用汇编编写实现下列功能的程序段,令Rl=a,R2=b。 (1)

128、 if(a! =b)&(a-b5) a=a+b; (2) while(a! =0) b=b+b*2 ;a-; (3)从)从a所指向的地址,拷贝所指向的地址,拷贝20个个32位数到位数到b所指向的地址。所指向的地址。 6为什么要使用为什么要使用Thumb模式?与模式?与ARM代码相比较,代码相比较,Thumb代代码的两大优势是什么?如何完成码的两大优势是什么?如何完成Thumb指令模式和指令模式和ARM指令模式指令模式之间的切换?之间的切换? 7写一段汇编程序:循环累加队列中的所有元素,直到碰到写一段汇编程序:循环累加队列中的所有元素,直到碰到x0值为止,结果放在值为止,结果放在 R4。 8写一个汇编程序,求一个含写一个汇编程序,求一个含64个带符号的个带符号的16位数组组成的队位数组组成的队列的平方和。列的平方和。库茫杏媳洒掸眨伶章废诧逝坏怂崩痢们瑶去挚涅聪吭雌男汉悍终鲍妥依祷第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-75

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号