- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式embedded系统基础电子课件教案第三章arm指令系统
本讲内容;一、 ARM指令系统概述;1、 指令系统概念; ARM指令是加载/存储(Load/Store)型:
也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
ARM指令可以分为五大类:
数据处理指令、存储器访问指令、分支指令、协处理器指令、杂项指令。
ARM指令有7种寻址方式:
立即寻址、寄存器寻址、寄存器间接寻址、基址寻址、堆栈寻址 、块拷贝寻址、相对寻址。;ARM指令基本的语法格式为:
Opcode {cond}{s} Rd, Rn {, Operand2}
Opcode:指令操作码。
cond:指令的条件码。
S:决定指令的操作是否影响cpsr的值。
Rd:目标寄存器编码。
Rn:包含第一个操作数的寄存器编码。
Operand2:第2操作数。
ARM指令典型的编码格式为:
(数据处理指令类);
条件码的位数和位置:每条ARM指令包含4位条件码域cond,它占用指令编码的最高四位[31:28]。
条件码的表示:条件编码共 24 =16 种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。(见P47 表2-6)
带条件指令的执行:ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。
只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。
条件码的书写方法:条件码的位置在指令助记符的后面(因此也称为条件后缀)。
例如: MOVEQ R0, R1;指令条件码表;二、 ARM寻址方式;二、 ARM寻址方式;1、 立即寻址; 在指令格式中,第二个操作数有12位:
因此有效立即数immediate可以表示成:
immediate=immed_8 循环右移(2×rot)
4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。
因此,将ARM中的立即数称为8位位图。
记住一条准则: “最后8位移动偶数位”得到立即数。;0; 只有能够通过此构造方法得到的才是合法的立即数。
合法立即数:
0xFF;0x104(其8位图为0x41);0xFF0;0xFF00
非法立即数:
0x101;0x102;0xFF1
深入理解:一个合法的立即数可能有多种编码方法,将使某些指令的执行产生不同的结果。 如
0x3F0
ARM汇编编译器生成立即数的规则为:
当立即数数值在0到0xFF范围时,令immed_8=immediate,rot=0。
其它情况下,汇编编译器选择使rot数值最小的编码方式。;2、寄存器寻址; 二、寄存器移位寻址
1、寄存器移位寻址
当第二操作数为寄存器型时,在执行寄存器寻址操作时,也可以对第二操作数寄存器进行移位,此时第二操作数形式为:
MOV Rd, Rn, Rm,{shift}
其中:
Rm 称为第二操作数寄存器
shift 用来指定移位类型和移位位数,有两种形式:
5位立即数 (其值小于32)
寄存器(用Rs表示) (其值小于32)
在指令执行时将寄存器移位后的内容作为第二操作数参与运算。例如指令:
ADD R3,R2,R1,LSR #2 ;R3←R2+(R1右移2位)
ADD R3,R2,R1,LSR R0 ;R3←R2+(R1右移R0位); 2、第二操作数移位方式
共有6种移位方式:
— LSL 逻辑左移 — LSR 逻辑右移
— ASL 算术左移 — ASR 算术右移
— ROR 循环右移 — RRX 带扩展的循环右移
(1)LSL:逻辑左移,空出的最低有效位用0填充。; (3)ASL:算术左移,由于左移空出的有效位用0填充,因此它与LSL同义。
(4)ASR:算术右移 (Arithmetic Shift Right) 。算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0 填充,如果是负数用1填充。
30 0 ; (5)ROR:循环右移(Rotate Right),移出的字的最低有效位依次填入空出的最高有效位。
31
原创力文档


文档评论(0)