1 / 37
文档名称:

arm汇编指令.pptx

格式:pptx   大小:227KB   页数:37页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

arm汇编指令.pptx

上传人:wz_198613 2018/5/27 文件大小:227 KB

下载得到文件列表

arm汇编指令.pptx

文档介绍

文档介绍:4. 寄存器间接寻址 操作数地址由寄存器给出
〖例〗MOV R2, #0xC0000018
STR R1, [R2]
……
……
0x000053A1
……
……
0xC0000010
0xC0000014
0xC0000018
0xC000001C
0xC0000020
0xC0000018
R2
0x000053A1
R1
5. 基址变址寻址 寄存器内容与指令给出的偏移量相加形成操作数地址
LDR R0, [R1, #4] ; R0←[R1+4]
LDR R0, [R1], #4 ; R0←[R1], R1←R1+4
LDR R0, [R1, R2] ; R0←[R1+R2]
偏移量由12位表示,即范围4K
6. 多寄存器寻址完成多个寄存器传送(多达16个寄存器)
LDMIA R0,{R1,R3-R5} ;R1←[R0], R3←[R0+4]
;R4←[R0+8], R5←[R0+12]
数据A
数据B
数据C
数据D
数据A
数据B
数据C
数据D
0x00100200
R0
0x00100200
0x00100204
0x00100208
0x0010020C
R1
R3
R4
R5
7. 相对寻址 PC为基地址,指令中地址标号为偏移量,二者相加形成操作数有效地址。
BL next
8. 堆栈寻址
SP 指示栈顶位置,4种堆栈操作



0x12345678

SP→
栈底
满递减堆栈
空递减堆栈



0x12345678

SP→
栈底
地址递增

0x12345678



SP→
栈底
空递增堆栈

0x12345678



SP→
栈底
满递增堆栈
ARM指令格式
基本指令格式
<opcode>[<cond>][s]<Rd>,<Rn>,[<op2>]
操作码
条件域(执行该指令要满足的条件)
要否影响程序状态寄存器(CPSR)
目的寄存器
第一源操作数,必须是寄存器
第二源操作数
1[<参数>]可选
2 指令长度32bit
3 数据处理类指令通过寄存器移位寻址实现移位操作,ARM不单独提供移位指令
4 除Load/Store类指令,其余指令均不能涉及存储器操作数
说明
<opcode>[<cond>][s]<Rd>,<Rn>,[<op2>]
操作码
条件助记符
标志
含义
0000
EQ
Z=1
相等
0001
NE
Z=0
不相等
0010
CS/HS
C=1
无符号数大于或等于
0011
CC/LO
C=0
无符号数小于
0100
MI
N=1
负数
0101
PL
N=0
正数或零
0110
VS
V=1
溢出
0111
VC
V=0
没有溢出
1000
HI
C=1,Z=0
无符号数大于
1001
LS
C=0,Z=1
无符号数小于或等于
1010
GE
N=V
有符号数大于或等于
1011
LT
N!=V
有符号数小于
1100
GT
Z=0,N=V
有符号数大于
1101
LE
Z=1,N!=V
有符号数小于或等于
1110
AL
任何
无条件执行(指令默认条件)
1111
NV
任何
从不执行(不要使用)
对应的汇编代码:
CMP R0,R1 ;比较R0(a)与R1(b)
ADDHI R0,R0,#1 ;若R0>R1,则R0=R0+1
ADDLS R1,R1,#1 ;若R0≤R1,则R1=R1+1
C代码:
If(a > b) a++;
Else b++;
<opcode>[<cond>][s]<Rd>,<Rn>,[<op2>]
<op2>中的32位立即数是由8位常数在32位宽度经过偶数次循环右移得到(指令解码后中保存该常数和移位信息);能通过上述算法得到的立即数是有效的,否则无效。
关于<op2>
数据处理指令中的<op2>有三种形式:
#imm (立即数寻址)
Rm (寄存器寻址)
Rm shift (寄存器移位寻址)
cond
0
0
1
opcode
s
Rn
Rd
Rotate_imm
Immed_8
4 4 1 4 4 4 8
关于移位操作
移位不额外花费时间,且Rm不受影响
移位次数由立即数或Rs决定
桶形移位器
ALU
Rd
预处理
第一源操作数
Rm
Rn
MSB Rm LSB
0
MSB Rm LSB
0
MSB Rm LSB
MSB Rm LSB
C
MSB R