嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

更新时间:2023-09-02 15:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

机器指令、伪指令和宏指令COMPUTER SCIENCE AND TECHNOLOGY

机器指令:能被处理器直接执行,而伪指 令宏和宏指令不能。机器指令包括ARM 指令集和Thumb指令集 ; 伪指令:在源程序汇编期间,由汇编编译 器处理。其作用是为汇编程序完成准备工 作; 宏指令:在程序中用于调用宏,宏是一段 独立的程序代码;在程序汇编时,对宏调 用进行展开,用宏体代替宏指令。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

ARM指令的编码格式COMPUTER SCIENCE AND TECHNOLOGY

实际指令语法格式为: ADDEQS R0,R1,R2; 该指令的编码格式为:27~25 24~21 20 19~16 15~12 11~~~~~~~~~~0

31~28

cond

opcode

S

Rn

Rd

op2

0000

001

0100

1

0001

0000

000000000010

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

ARM指令的助记符COMPUTER SCIENCE AND TECHNOLOGY

ARM指令在汇编程序中用助记符表示,一般 ARM指令的助记符格式为: <opcode>{<cond>} {S} <Rd>,<Rn>,<op2> 其中: <opcode> 操作码,如ADD表示算术加操作指令; {<cond>} 决定指令执行的条件域; {S} 决定指令执行是否影响CPSR寄存器的值; <Rd> 目的寄存器; <Rn> 第一个操作数,为寄存器; <op2> 第二个操作数。 例如,指令 ADDEQS R1,R2,#5

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

条件域<cond>COMPUTER SCIENCE AND TECHNOLOGY

几乎所有的ARM指令都可以根据当前程序状态寄 存器CPSR中标志位的值,有条件地执行。 ARM指令的条件域<cond>有16种类型。cond EQ NE CS CPSR中标志位 Z置位 Z清零 C置位 相等 不相等 无符号数大于或等于 含义

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

CCMI PL VS VC HI LS GE LT GT LE AL

C清零N置位 N清零 V置位 V清零 C置位Z清零 C清零Z置位 N等于V N不等于V Z清零且(N等于V) Z置位或(N不等于V) 忽略

无符号数小于负数 正数或零 溢出 未溢出 无符号数大于 无符号数小于或等于 带符号数大于或等于 带符号数小于 带符号数大于 带符号数小于或等于 无条件执行

依版本不同,定义不同

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

寻址方式COMPUTER SCIENCE AND TECHNOLOGY

9种: 立即数寻址 寄存器寻址 寄存器移位寻址 寄存器间接寻址 基址变址寻址 相对寻址 多寄存器寻址 块拷贝寻址 堆栈寻址

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

立即数寻址COMPUTER SCIENCE AND TECHNOLOGY

在立即数寻址中,操作数本身直接在指令中给出, 取出指令也就获得了操作数,这个操作数也称为 立即数。 #后接0x或&表示十六进制数,0b表示二进制数, 0d或缺省表示十进制数。 例: ADD R0,R1,#5; MOV R0,#0x55; R0=R1+5 R0=0x55

其中:操作数5,0x55就是立即数,立即数在指令 中要以“#”为前缀,后面跟实际数值。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

寄存器寻址COMPUTER SCIENCE AND TECHNOLOGY

在寄存器寻址方式下,寄存器的值即为操作数。 ARM指令普遍采

用此种寻址方式。 例: ADD R0,R1,R2 MOV R0,R1 ; ; R0=R1+R2 R0=R1

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

寄存器移位寻址COMPUTER SCIENCE AND TECHNOLOGY

寄存器移位寻址的操作数由寄存器的数值做相应 移位而得到。 移位的方式在指令中以助记符的形式给出,而移 位的位数可用立即数或寄存器寻址方式表示。 例: ADD R0,R1,R2,ROR #5 ;R0=R1+R2循环右移5位 MOV R0,R1,LSL R3 ;R0=R1逻辑左移R3位 移位操作在ARM指令集中不作为单独的指令使用, ARM指令集共有5种位移操作。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

ARM指令集的5种位移操作COMPUTER SCIENCE AND TECHNOLOGY

LSL逻辑左移 :Rx,LSL <op1> LSR逻辑右移 : Rx,LSR <op1> ASR算术右移 :Rx,ASR <op1>

31

0 0

31 0

0

31

0

ROR循环右移 :Rx,ROR <op1>31 0

RRX带扩展的循环右移:Rx,RRX31 C 0

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

寄存器间接寻址COMPUTER SCIENCE AND TECHNOLOGY

寄存器中的值为操作数的物理地址,而实际的操作 数存放在存储器中。 例: STR R0,[R1] LDR R0,[R1] ; ; [R1]=R0 R0=[R1]

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

基址变址寻址COMPUTER SCIENCE AND TECHNOLOGY

将寄存器(称为基址寄存器)的值与指令中给出 的偏移地址量相加,所得结果作为操作数的物理 地址。 例: LDR R0,[R1,#5] ; LDR R0,[R1,R2] ; R0=[R1+5] R0=[R1+R2]

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

相对寻址COMPUTER SCIENCE AND TECHNOLOGY

相对寻址同基址变址寻址相似,区别只是将程序 计数器PC作为基址寄存器,指令中的标记作为地 址偏移量。 例: BEQ process1 …… process1 ……

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

多寄存器寻址COMPUTER SCIENCE AND TECHNOLOGY

在多寄存器寻址方式中,一条指令可实现一组寄 存器值的传送。 连续的寄存器间用“-”连接,否则用“,”分 隔。

例: LDMIA

R0,{R1-R5} ;R1=[R0],R2=[R0+4],R3=[R0+8] ;R4=[R0+12],R5=[R0+16]

指令中IA表示在执行完一次Load操作后,R0自增 4。该指令将以R0为起始地址的5个字数据分别装 入R1,R2,R3,R4,R5中。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

块拷贝寻址COMPUTER SCIENCE AND TECHNOLOGY

块拷贝寻址可实现连续地址数据从存储器的某一 位置拷贝到另一位置。 例: LDMIA R0,{R1-R5}; STMIA R1,{R1-R5}; 第一条指令从以R0的值为起始地址的存储单元中 取出5个字的数据,第二条指令将取出的数据存入 以R1的值为起始地址的存储单元中。 实际上是多寄存器寻址的组合。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

堆栈寻址COMPUTER SCIENCE AND TECHNOLOGY

堆栈寻址用于数据栈与寄存器组之间批量数据 传输。 当数据写入和读出内存的顺序不同时,使用堆 栈寻址可以很好的解决这问题。 例: STMFD R13!,{R0,R1,R2,R3,R4}; LDMFD R13!,{R0,R1,R2,R3,R4} 第一条指令,将R0-R4中的数据压入堆栈, R13为堆栈指针; 第二条指令,将数据出栈,恢复R0-R4原先的 值。

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

ARM指令集COMPUTER SCIENCE A

ND TECHNOLOGY

6种类型(53种主要助记符) : 数据处理指令(22种主要助记符) 跳转指令(4种主要助记符) Load/Store指令(16种主要助记符) 程序状态寄存器指令(2种主要助记符) 协处理器指令(5种主要助记符) 软件中断指令 (2种主要助记符)

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

数据处理指令1COMPUTER SCIENCE AND TECHNOLOGY

1.MOV 数据传送指令 格式:MOV{<cond>}{S} <Rd>,<op1>; 功能:Rd=op1 op1可以是寄存器、被移位的寄存器或立即数。 例如: MOV R0,#5 ;R0=5 MOV R0,R1 ;R0=R1 MOV R0,R1,LSL#5 ;R0=R1左移5位

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

数据处理指令2COMPUTER SCIENCE AND TECHNOLOGY

2.MVN 数据取反传送指令 格式:MVN{<cond>}{S} <Rd>,<op1>; 功能:将op1表示的值传送到目的寄存器Rd中, 但该值在传送前被按位取反,即Rd=!op1; op1可以是寄存器、被移位的寄存器或立即数。 例如: MVN R0,#0 ;R0=-1

嵌入式系统(第3-2章 ARM寻址方式与指令系统 )

数据处理指令3COMPUTER SCIENCE AND TECHNOLOGY

3.ADD 加法指令 格式:ADD{<cond>}{S} <Rd>,<Rn>,<op2>; 功能:Rd=Rn+op2 op2可以是寄存器,被移位的寄存器或立即数。 例如: ADD R0,R1,#5 ;R0=R1+5 ADD R0,R1,R2 ;R0=R1+R2 ADD R0,R1,R2,LSL#5 ;R0=R1+R2左移5位

本文来源:https://www.bwwdw.com/article/dy8i.html

Top