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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章ARM嵌入式处理器指令系统1第3章ARM嵌入式处理器指令系统3.1ARM指令分类及指令格式3.2ARM指令的寻址方式3.3ARM指令集3.4Thumb指令集习题虱抢少赃其碧内彰写娄市语炕耸汇市棍咏袄拱恐猖毙罩肥理症织洪樟晕狂第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统2本章以流行ARM处理器为例介绍嵌入式微处理器的指令系统,包括ARM处理器的指令格式分类、指令格式、寻址方式、32位的ARM指令集和16位的Thumb指令集。3.1ARM指令分类及指令格式麻潘冻砚涝破函瞎氛毅似低卉翻毙足壶诌渠拍谐东淮氯蛾轧辑魔骚兑扳术第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统33.1.lARM指令分类惰漳羌慧贾希淤慨膳叭撵赔期栋普乘墨壹帽曳听闯辅疫巫桅籍得父旋传茬第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统4痹缸洼疚旨施麦萧将吼或哦皱备眶瑚凡窒宦延橱燕倔嗣爪办褂票褒娶仟敞第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统5辩庸占渠汇蚊膀药编嚎铀宿砷媒皖正虚哨浊玲垄难纬懂匆左殃坟捕莎屑禾第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统6侮鸥构簇棺洋毡由攘反癣单钎歧屑硬桅威肾择榔烁站属酱盘触辱上什搪嚣第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统7诉打留镶览鲜剪垂窟抠腿炽笼警瑰掸辱乒鸽绿鲤遍翰羚科啸殖坊乔潦跑骡第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统81.立即数符号#“#”符号表示立即数,该符号后的数据可以是二进制数,也可以是十进制数或十六进制数,如果操作数为十进制数,则前面除了#外,没有其他符号。2.二进制符号%%符号后面的数字表示二进制数,如%10010101表示二进制数10010101,即十进制数149。3.二进制符号2_2_符号是二进制前缀的另一种形式,如2_10010101也表示二进制数10010101,与%10010101等效。3.1.3ARM指令中的操作数符号蜂颜金藏根鄂烤粮期勿摘辞坪穗劲针苛窃襟烙降眩凹院直遇亿惟壬唉豆赋第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统94.十六进制符号0x0x后面的数据表示十六进制数,如0xFFFF,表示十六进制数FFFF,即十进制数65535。5.更新基址寄存器符号!!符号表示指令在完成操作后应将最后的地址写入基址寄存器。6.复制SPSR到CPSR符号“^”“^”符号通常在批量数据存储指令中作为后缀放在寄存器之后。当其前面的寄存器不包含PC时,该符号表示所用的寄存器是用户模式的寄存器;当其前面的寄存器包含PC时该符号指示将SPSR寄存器的值复制到CPSR寄存器中。7.指示寄存器列表范围符号“-”-符号用于在有些指令中表示多个连续寄存器,即含义从…到…。如RO-R7表示,R1,R2,R3,R4,R5,R6,R7这8个寄存器。芭模汪脏付勉酣亢厩巡耽躁窍征伊鲸宗败象浓捍誊触延卞髓沥昌洛练筑旭第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统10ARM微处理器内嵌的桶型移位器(BarrelShifter),支持数据的各种移位操作,但在ARM指令集中没有单独的指令供移位操作使用。移位操作在汇编语言中表示为指令中的选项,只能作为指令格式中的一个字段。如当数据处理指令的第2个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。移位操作包括逻辑左移(LSL)、算术左移(ASL)、逻辑右移(LSR)、算术右移(ASR)、循环右移(ROR)及带扩展的循环右移(RRX)共6种类型。3.1.4ARM指令中的移位操作胰腾茶梦溢憎技视势赢寿甥牵顶两岛狂吴降煤勾脏喘吮馋窃催泛午保鞘痹第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统111.逻辑左移操作格式:通用寄存器,LSL立即数用途:对通用寄存器中的内容进行逻辑左移操作,按操作数所指定的数量向左移位,右端(低位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。例如:MOVR0,Rl,LSL#2;将Rl中的内容算术左移2位后传送到R0中2.算术左移操作格式:通用寄存器,ASL操作数用途:ASL表示对通用寄存器中的内容进行算术左移操作,按操作数所指定的数量向左移位,右端(低位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。LSL与ASL效果相同,可以互换。例如:MOVR0,R1,ASL#2;将R1中的内容算术左移2位后传送到R0中奢潘凝肥在允它咽浸仔妥跺氏载匪遂堵餐确狮汰刃舞庆载素列靴渺希操和第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统123.逻辑右移操作格式:通用寄存器,LSR操作数用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端(高位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。例如:MOVR0,R1,LSR#2;将R1中的内容逻辑右移2位后传送到R0中,左端用零来填充4.算术右移操作格式:通用寄存器,ASR操作数用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端(高位)用第31位的值(亦即符号位)来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。例如:MOVR0,R1,ASR#2;将R1中的内容算术右移2位后传送到R0中,左端用第31位的值来填充元毫阅勋谨胸诌瞩袁素为具拧阻鳞矮耶寝梅右沃寡硕稠阳殆脏添挖婿浚叔第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统135.循环右移操作格式:通用寄存器,ROR操作数用途:对通用寄存器中的内容进行循环右移操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。当进行32位的循环右移操作时,通用寄存器中的值不改变。例如:MOVR0,R1,ROR#2;将R1中的内容循环右移2位后传送到R0中6.带扩展的循环右移操作格式:通用寄存器,RRX操作数用途:对通用寄存器中的内容进行带扩展的循环右移操作,按操作数所指定的数量向右循环移位,左端用进位标志位来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是0~3l之间的整数)。例如:MOVR0,R1,RRX#2;将R1中的内容进行带扩展的循环右移2位后传送到R0中凿天辰类汞殉茵谆员终抹凡灵泽傈典孕赛募鸵率惕蜒挣梢按搏割囊窘吭汗第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统141.立即寻址立即寻址也叫立即数寻址,是一种特殊的寻址方式。采用立即寻址方式时,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。采用立即寻址方式的指令示例如下:MOVR0,#0xl0FF66EDADCR0,R0,#1000;R0←R0+1000+C在以上2条指令中,第2个源操作数即为立即数3.2ARM指令的寻址方式所谓寻址方式,就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持的常见寻址方式有立即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址、堆栈寻址及多寄存器寻址7种。3.2.1ARM指令的寻址方式矮宦耿馅潦厂旧谨癣乎柱孰魂笼陨调肥五缸授团污隘漏匪履宦沪料菜旗恕第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统152.寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。采用寄存器寻址方式的指令示例如下:ADDR0,R1,R2;R0←Rl+R23.寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中,用于间接寻址的寄存器必须用方括号[]括起来。采用寄存器间接寻址方式的指令示例如下:ADDR0,Rl,[R2];R0←Rl+[R2]LDRR0,[R1];R0←[Rl]STRR0,[Rl];[Rl]←R0急峪粟烁捷吨筏檄悸贤昼深滇诲拇冰髓硷阂乐投鞭峰忧贴荡暗痹纽晓近铜第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统164.基址加变址寻址基址加变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。基址加变址寻址方式常用于访问某地址附近的地址单元。采用基址加变址寻址方式的指令有如下几种常见形式。(1)LDRR0,[R1,#4];R0←[Rl+4](2)LDRR0,[R1,#4]!;R0←[Rl+4]、Rl←Rl+4该指令表示以寄存器Rl的值加上4作为操作数的有效地址,将取得的操作数存入寄存器R0中,然后再将寄存器Rl的值增加4。符号!表示指令在完成数据传送后应该更新基址寄存器。(3)LDR0,[R1],#4;R0←[Rl]、Rl←Rl+4该指令表示以寄存器Rl的值作为操作数的有效地址,将取得的操作数存入寄存器R0中,然后再将寄存器Rl的值增加4。(4)LDRR0,[Rl,R2];R0←[Rl+R2]堑胰往异侄替厅汕畜爸仇胀涕淮颓龟悯颤宜碎忱洪媒阎聊匪职茬黄铁蛇灿第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统175.相对寻址相对寻址以程序计数器(PC)的当前值为基地址,以指令中的地址标号为偏移量,将两者相加之后的值作为操作数的有效地址。以下程序段的作用是完成子程序的调用和返回,其中跳转指令BL即采用了相对寻址方式。BLSubroutine_A;跳转到子程序Subroutine_A处执行.......SubroutineA......MOVPC,LR;从子程序返回假设程序段中BL指令所在地址(PC值)为0x2100000,Subroutine_A对应偏移量为0x0100,则转移到Subroutine_A处对应的地址为0x2100100,此地址在汇编时自动形成。柞鬼赞坡犯面钳着斟温龟锌丫怂湾辞恒显并书酗恒示冬兰傍鱼嫉戴重知韧第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌入式处理器指令系统-第3章ARM嵌入式处理器指令系统186.堆找寻址堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆核指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(FullStack),而当堆栈指针指向下一个将要放人数据的空位置时,称为空堆栈(EmptyStack)。根据堆栈的生成方式,又可以分为递增堆栈(AscendingStack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当由高地址向低地址生成时,称为递减堆栈。因此堆栈工作方式有4种类型:(1)满递增堆栈;(2)满递减堆栈;(3)空递增堆栈:(4)空递减堆栈。胆麦咳诀猖牌默室墩彼滩恼乐镰抱袖闺曝押威摘阴饿恕核燎帛矽砌庙状誉第3章-ARM嵌入式处理器指令系统-第3章-ARM嵌

1 / 75
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功