嵌入式系统课件4-5.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统课件4-5.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 课件
- 资源描述:
-
1、4C H A P T E RARM7指令集指令集1/2/20231本章重点1、ARM处理器的寻址方式处理器的寻址方式2、ARM指令集指令集3、Thumb指令集指令集1/2/202324.1 ARMARM指令的分类指令的分类与格式 ARMARM微处理器的指令集可以分为跳转微处理器的指令集可以分为跳转(分支)指令、分支)指令、数据处理指令、程序状态寄存器(数据处理指令、程序状态寄存器(CPSRCPSR)处理指令、)处理指令、加载加载/存储指令、协处理器指令和异常产生指令六存储指令、协处理器指令和异常产生指令六大类,具体的指令及功能如表大类,具体的指令及功能如表4-14-1所示(表中指令所示(表中指
2、令为基本为基本ARMARM指令,不包括派生的指令,不包括派生的ARMARM指令)指令)。1/2/202331/2/202344.1.2 4.1.2 指令格式指令格式用助记符表示的用助记符表示的ARMARM指令一般格式如下:指令一般格式如下:S S,(格式中(格式中的内容必不可少,的内容必不可少,中的内容可省略)中的内容可省略)表示操作码,如表示操作码,如ADDADD表示算术加法。表示算术加法。表示指令执行的条件域,如表示指令执行的条件域,如EQEQ、NENE等,缺省为等,缺省为ALAL。SS决定指令的执行结果是否影响决定指令的执行结果是否影响CPSRCPSR的值,使用该后缀则的值,使用该后缀则
3、指令执行的结果影响指令执行的结果影响CPSRCPSR的值,否则不影响。的值,否则不影响。表示目的寄存器。表示目的寄存器。表示第一个操作数,为寄存器。表示第一个操作数,为寄存器。表示第二个操作数,可以是立即数、寄存器和寄存表示第二个操作数,可以是立即数、寄存器和寄存器移位操作数。器移位操作数。1/2/202352 指令的条件域当处理器工作在当处理器工作在ARMARM状态时,几乎所有的指令均根状态时,几乎所有的指令均根据据CPSRCPSR中条件码的状态和指令的条件域有条件的中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,执行。当指令的执行条件满足时,指令被执行,否则指
4、令被忽略。否则指令被忽略。每一条每一条ARMARM指令包含指令包含4 4位的条件码,位于指令的最位的条件码,位于指令的最高高4 4位位31:2831:28。条件码共有。条件码共有1616种,每种条件码可种,每种条件码可用两个字符表示,这两个字符可以添加在指令助用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。记符的后面和指令同时使用。例如,跳转指令例如,跳转指令B B可以加上后缀可以加上后缀EQEQ变为变为BEQBEQ表示表示“相等则跳转相等则跳转”,即当,即当CPSRCPSR中的中的Z Z标志置位时发生标志置位时发生跳转跳转1/2/20236NZCV IM0M1M2M3M4
5、TF.31 30 29 28 27 26 8 7 6 5 4 3 2 1 0 程序状态寄存器条件代码标志保留控制位溢出标志 oVerflow进位或借位扩展 Carry零 Zero负或小于 NegativeIRQ禁止 InterruptFIQ禁止 Fast状态位 Thumb模式位 ModeNZCVIM0M1M2M3M4TFCPSRCPSR寄存器的格式寄存器的格式1/2/20237 指令的条件码在在16种条件标志码中,只有种条件标志码中,只有15种可以使用,第种可以使用,第16种种(1111)为系统保留,暂时不能使用。)为系统保留,暂时不能使用。1/2/20238S S后缀后缀 指令中使用指令中使
6、用S S后缀时,指令执行后程序状后缀时,指令执行后程序状态寄存器的条件标志位将被刷新,不使用态寄存器的条件标志位将被刷新,不使用S S后缀时,指令执行后程序状态寄存器的条件后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。标志将不会发生变化。S S后缀通常用于对条件进行测试,例如是后缀通常用于对条件进行测试,例如是否有溢出,是否进位等;根据这些变化,就否有溢出,是否进位等;根据这些变化,就可以进行一些判断,如是否大于,是否相等;可以进行一些判断,如是否大于,是否相等;从而可能影响指令执行的顺序。从而可能影响指令执行的顺序。1/2/20239条件后缀和S后缀的关系如下:(1 1)如果既有
7、条件后缀又有)如果既有条件后缀又有S S后缀,则书写时后缀,则书写时S S排在后面,如:排在后面,如:ADDEQS R1,R0,R2ADDEQS R1,R0,R2该指令该指令在在Z=1Z=1时执行,将时执行,将R0+R2R0+R2的值放入的值放入R1R1,同时,同时刷新条件标志位。刷新条件标志位。(2 2)条件后缀是要测试条件标志位,而)条件后缀是要测试条件标志位,而S S后后缀是要刷新条件标志位。缀是要刷新条件标志位。(3 3)条件后缀要测试的是执行前的标志位,)条件后缀要测试的是执行前的标志位,而而S S后缀是依据指令的结果改变条件标志。后缀是依据指令的结果改变条件标志。1/2/20231
8、0例:例:假设假设R0=0 x1,R3=0 x3,R0=0 x1,R3=0 x3,指令执行之前指令执行之前CPSR=nzcvqIFt_SVC,CPSR=nzcvqIFt_SVC,分别执行如下指令分别执行如下指令CPSRCPSR的值有何变化?的值有何变化?SUB R1,R0,R3 SUB R1,R0,R3 ;R0R0的值减去的值减去R3R3的值,结果存入的值,结果存入R1R1 SUBS R1,R0,R3 SUBS R1,R0,R3 ;R0R0的值减去的值减去R3R3的值,结果存入的值,结果存入R1R1 影响标志位影响标志位 分析:执行第分析:执行第1 1条指令对于标志寄存器的值没有任何影条指令对
9、于标志寄存器的值没有任何影 响,因此响,因此CPSRCPSR的值不变。的值不变。执行第执行第2 2条指令后条指令后CPSR=NzcvqIFt_SVC,CPSR=NzcvqIFt_SVC,因为因为R0R0的的 值减去值减去R3R3值,结果变成负数,故而值,结果变成负数,故而NN被置位了被置位了1/2/2023114.1.3 ARM指令中的操作数符号 ARMARM指令格式中的操作数有不同的符号,说明如下:指令格式中的操作数有不同的符号,说明如下:1 1、立即数符号立即数符号#符号表示一个立即数,该符号后的数据可以是十进制、符号表示一个立即数,该符号后的数据可以是十进制、二进制或十六进制数。二进制或
10、十六进制数。#2#22 2、二进制符号、二进制符号%(2 2)%后面的数字表示二进制数,例如:后面的数字表示二进制数,例如:%10010101%10010101 (2 100101012 10010101),表示二进制数),表示二进制数1001010110010101,即十进制数,即十进制数149149。3 3、十六进制数、十六进制数0 x0 x 0 x 0 x后面的数字表示十六进制数,如:后面的数字表示十六进制数,如:0 xFFFF 0 xFFFF,表示十六进,表示十六进制数制数FFFFFFFF,即十进制数的,即十进制数的6553565535 1/2/202312ARMARM指令中的操作数符
11、号(续指令中的操作数符号(续1 1)5 5、更新基地址寄存器符号!、更新基地址寄存器符号!符号表示指令在完成操作后应将最后的地址写!符号表示指令在完成操作后应将最后的地址写入基址寄存器。入基址寄存器。如果指令地址表达式中不含!后缀,则基址寄存器如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。指令中的地址表达式中中的地址值不会发生变化。指令中的地址表达式中含有含有!后缀时,指令执行后,基址寄存器中的地址后缀时,指令执行后,基址寄存器中的地址值将发生变化,变化的结果如下:值将发生变化,变化的结果如下:基址寄存器中的值(指令执行后)基址寄存器中的值(指令执行后)指令执行前的值地址
12、偏移量指令执行前的值地址偏移量1/2/202313例例 分别执行下面两条指令有何区别?分别执行下面两条指令有何区别?LDR R3,R0,#4 LDR R3,R0,#4 LDR R3,R0,#4 LDR R3,R0,#4!分析:在上述指令中,第分析:在上述指令中,第1 1条指令没有后缀!,条指令没有后缀!,指令的结果是把指令的结果是把R0R0加加4 4作为地址指针,把这个作为地址指针,把这个指针所指向的地址单元所存储的数据读入指针所指向的地址单元所存储的数据读入R3R3,R0R0的值不变。第的值不变。第2 2条指令除了实现以上操作外,条指令除了实现以上操作外,还把还把R0R04 4的结果送到的结
13、果送到R0R0中。中。1/2/202314使用使用!后缀需要注意如下事项:后缀需要注意如下事项:(1)!(1)!后缀必须紧跟在地址表达式后面,而地后缀必须紧跟在地址表达式后面,而地址表达式要有明确的地址偏移量。址表达式要有明确的地址偏移量。(2)!(2)!后缀不能用于后缀不能用于R15(PC)R15(PC)的后面的后面 1/2/2023156 6、复制、复制SPSRSPSR到到CPSRCPSR符号符号 该符号通常在批量数据存储指令中作为后缀放该符号通常在批量数据存储指令中作为后缀放在存储器之后,当前寄存器不包含在存储器之后,当前寄存器不包含PCPC时,该符号表时,该符号表示所用的寄存器使用户模
14、式的寄存器;当其前面的示所用的寄存器使用户模式的寄存器;当其前面的寄存器包含寄存器包含PCPC时,该符号指示将时,该符号指示将SPSRSPSR寄存器的值复寄存器的值复制到制到CPSRCPSR寄存器中。寄存器中。7 7、指示寄存器列表范围符号、指示寄存器列表范围符号 符号用于有些指令中表示多个连续的寄存器时,符号用于有些指令中表示多个连续的寄存器时,及从及从到到。例如:。例如:R0R7R0R7,表示,表示R0R0、R1.R7 R1.R7,8 8个寄存器。个寄存器。1/2/2023164.1.4 ARM指令中的移位操作ARMARM微处理器内嵌的桶型移位器(微处理器内嵌的桶型移位器(Barrel S
15、hifterBarrel Shifter),),支持数据的各种移位操作,移位操作在支持数据的各种移位操作,移位操作在ARMARM指令指令集中不作为单独的指令使用,它只能作为指令格式集中不作为单独的指令使用,它只能作为指令格式中是一个字段,在汇编语言中表示为指令中的选项。中是一个字段,在汇编语言中表示为指令中的选项。例如,数据处理指令的第二个操作数为寄存器时,例如,数据处理指令的第二个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。就可以加入移位操作选项对它进行各种移位操作。移位操作包括如下移位操作包括如下6 6种类型,种类型,LSL LSL 逻辑左移、逻辑左移、ASL ASL 算
16、术左移算术左移 、LSR LSR 逻辑右移逻辑右移 、ASR ASR 算术右移、算术右移、ROR ROR 循环右移循环右移 、RRX RRX 带扩展的循环右移带扩展的循环右移;ASLASL和和LSLLSL是是等价的,可以自由互换:等价的,可以自由互换:1/2/2023174.2 指令集介绍 桶形移位器支持数据的各种移位操作桶形移位器支持数据的各种移位操作ALU桶形移位器桶形移位器Rd结果结果N预预处处理理未未预预处处理理RmRn1/2/202318ARM指令中的移位操作(续1)1 1、LSLLSL(或(或ASLASL)逻辑(或算术)左移操作逻辑(或算术)左移操作 LSL LSL(或(或ASLA
17、SL)操作的格式为:)操作的格式为:通用寄存器,通用寄存器,LSLLSL(或(或ASLASL)操作数操作数 用途:用途:LSL LSL(或(或ASLASL)可完成对通用寄存器中的内容进行逻辑(或算)可完成对通用寄存器中的内容进行逻辑(或算术)的左移操作,按操作数所指定的数量向左移位,低位术)的左移操作,按操作数所指定的数量向左移位,低位用零来填充。其中,操作数可以用一个立即值用零来填充。其中,操作数可以用一个立即值(从从 0 0 到到 31)31)指定移位数量,或用包含在指定移位数量,或用包含在 0 0 和和 31 31 之间的一个值的寄存器之间的一个值的寄存器指定移位数量。指定移位数量。操作
18、示例:操作示例:MOV R0,R1,LSL#2 MOV R0,R1,LSL#2 ;将;将R1R1中的内容左移两位后传送到中的内容左移两位后传送到R0R0中。中。1/2/202319ARM指令中的移位操作(续2)2 2、LSR LSR 逻辑右移操作逻辑右移操作 LSR LSR操作的格式为:操作的格式为:通用寄存器,通用寄存器,LSR LSR 操作数操作数 用途:用途:LSR LSR可完成对通用寄存器中的内容进行右移的操作,可完成对通用寄存器中的内容进行右移的操作,按操作数所指定的数量向右移位,左端用零来填充。其中,按操作数所指定的数量向右移位,左端用零来填充。其中,操作数操作数可以用一个立即值操
19、作数操作数可以用一个立即值(从从 0 0 到到 31)31)指定移位数量,指定移位数量,或用包含在或用包含在 0 0 和和 31 31 之间的一个值的寄存器指定移位数量。之间的一个值的寄存器指定移位数量。操作示例:操作示例:MOV R0,R1,LSR#2 MOV R0,R1,LSR#2 ;将;将R1R1中的内容右移两位后传送到中的内容右移两位后传送到 ;R0R0中,左端用零来填充。中,左端用零来填充。1/2/202320ARM指令中的移位操作(续3)3 3、ASR ASR 算数右移操作算数右移操作 ASR ASR操作的格式为:操作的格式为:通用寄存器,通用寄存器,ASR ASR 操作数操作数
20、用途:用途:ASR ASR可完成对通用寄存器中的内容进行算数右移的操作,按可完成对通用寄存器中的内容进行算数右移的操作,按操作数所指定的数量向右移位,左端用第操作数所指定的数量向右移位,左端用第3131位的值来填充。位的值来填充。其中,操作数操作数可以用一个立即值其中,操作数操作数可以用一个立即值(从从 0 0 到到 31)31)指定移指定移位数量,或用包含在位数量,或用包含在 0 0 和和 31 31 之间的一个值的寄存器指定移之间的一个值的寄存器指定移位数量。操作示例:位数量。操作示例:MOV R0,R1,ASR#2 MOV R0,R1,ASR#2 ;将;将R1R1中的内容右移两位后传送中
21、的内容右移两位后传送到到R0R0中,左端用第中,左端用第3131位的值来填充。位的值来填充。1/2/202321ARM指令中的移位操作(续4)4 4、ROR ROR 循环右移操作循环右移操作 ROR ROR操作的格式为:通用寄存器,操作的格式为:通用寄存器,ROR ROR 操作数操作数 用途:用途:ROR ROR可完成对通用寄存器中的内容进行循环右移的操作,按可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器,也可以是立即来填充。其中,操作数可以是通用寄存器,也
22、可以是立即数(数(0 03131)。显然,当进行)。显然,当进行3232位的循环右移操作时,通用位的循环右移操作时,通用寄存器中的值不改变。寄存器中的值不改变。操作示例:操作示例:MOV R0,R1,ROR#2 MOV R0,R1,ROR#2 ;将;将R1R1中的内容循环右移两位后中的内容循环右移两位后传送到传送到R0R0中。中。1/2/202322ARM指令中的移位操作(续5)5 5、RRX RRX 带扩展的循环右移操作带扩展的循环右移操作 RRX RRX操作的格式为:操作的格式为:通用寄存器,通用寄存器,RRX RRX 操作数操作数 用途:用途:RRX RRX可完成对通用寄存器中的内容进行
23、带扩展的循环右移的可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位操作,按操作数所指定的数量向右循环移位,左端用进位标志位标志位C C来填充。其中,操作数可以是通用寄存器,也可以来填充。其中,操作数可以是通用寄存器,也可以是立即数(是立即数(0 03131)。)。操作示例:操作示例:MOV R0,R1,RRX#2 MOV R0,R1,RRX#2 ;将;将R1R1中的内容进行带扩展的循中的内容进行带扩展的循环右移两位后传送到环右移两位后传送到R0R0中。中。1/2/2023234.2 ARM处理器寻址方式 寻址方式是根据指令中给出的地址码字段来寻
24、址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。实现寻找真实操作数地址的方式。ARMARM处理器处理器具有具有7 7种基本寻址方式。种基本寻址方式。1.1.立即寻址;立即寻址;2.2.寄存器寻址;寄存器寻址;3.3.寄存器间接寻址;寄存器间接寻址;4.4.基址加变址寻址;基址加变址寻址;5.5.相对寻址;相对寻址;6.6.堆栈寻址;堆栈寻址;7.7.多寄存器寻址;多寄存器寻址;1/2/202324寻址方式分类立即寻址 立即寻址指令中的操作码字段后面的地址码部立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令分即是操作数本身,也就是说,数据就包
25、含在指令当中,取出指令也就取出了可以立即使用的操作数当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数这样的数称为立即数)。立即寻址指令举例如下:。立即寻址指令举例如下:SUBSR0,R0,#1 ;R0减减1,结果放入,结果放入R0,并且影响标志位,并且影响标志位MOVR0,#0 xFF000 ;将立即数将立即数0 xFF000装入装入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存储MOV R0,#0 xFF000 xFF00从代码中获得数据1/2/202325寻址方式分类寄存器寻址 操作数的值在寄存器中,指令中的地址码字段操作数的值在寄存器中,指令中的地址
展开阅读全文