当前位置:
文档之家› 03 嵌入式汇编程序设计基础
03 嵌入式汇编程序设计基础
For an addition, including CMN, C =1 if produced a carry. For a subtraction, including CMP, C=0 if produced a borrow.
V = ALU计算结果溢出(ALU operation Overflowed)。 Q=E DSP (preserve and restore the CPSR Q flag if an exception occurs about
第1章 嵌入式系统设计基础
24
加減法指令及例程
SUB SUBS RSB RSBS SBC RSC stop BL END R4,R2,R1 R4,R2,R1 R5,R2,R1 R5,R2,R1 R6,R1,R2 R7,R1,R2 stop ;/*end of the program*/ ;/R2减R1的值传送到R4*/ ;/*R2减R1的值传送到R4, ;s表示值会影响cpsr*/ ;/*R1减R2的值传送到R5*/ ;/*R1减R2的值后传送到R5, ; s表示会影响cpsr*/ ;/*R1减R2的值再减去!CARRY ;后传送到R6*/ ;/*R2减R1的值再减去!CARRY ;后传送到R7*/
寄存器R15,又称为PC (program counter)
第1章 嵌入式系统设计基础
5
ARM的寄存器组织
2.状态寄存器: 当前程序状态寄存器CPSR (current program status Register),可以在任何工作模式下被访问; 程序状态备份寄存器SPSR (Saved Program Status Register),只有在异常模式下,才能被访问 ;
第1章 嵌入式系统设计基础
18
寄存器间接寻址
LDR ADD
R1,[R2] R1,R1,[R2]
; R1←[R2] ; R1←R1+[R2]
第1章 嵌入式系统设计基础
19
多寄存器寻址
LDMIA
R1,{R2,R12}
; R2←[R1],R12←[R2+4]
第1章 嵌入式系统设计基础
20
第3章 ARM程序设计基础
有符号小于 有符号大于 有符号小于或等于 总是(always)
1111
NV
无
从不(never)
注:AL是默认的,NV不建议使用。
第1章 嵌入式系统设计基础
13
第3章 ARM程序设计基础
1 2 3 4
ARM处理器工作模式及寄存器功能 ARM寻址方式 ARM指令及应用程序设计 ARM伪指令及应用程序设计 ARM汇编程序设计实例
9
异常向量表
地址 异常 进入模式 中断优先级
0x0000,0000
0x0000,0004 0x0000,000C
复位
无定义指令
管理模式
无定义模式
1
6 5
中止(预取指令)x0000,0018
中止(预取数据) 中止模式
IRQ IRQ
2
4
0x0000,001C
0x0000,0014 0x0000,0008
1 2 3 4
ARM处理器工作模式及寄存器功能 ARM寻址方式 ARM指令及应用程序设计 ARM伪指令及应用程序设计 ARM汇编程序设计实例
5
mov指令及例程
MOV{<cond>}{S} <Rd>,<op1> 数据传送指令 MVN{<cond>}{S} <Rd>,<op1> 数据取反传送指令
R12
R13 R14
R12
R13_SVC R14_SVC
R12
R13_ABORT R14_ABORT
R12
R13_UNDEF R14_UNDEF
R12
R13_IRQ R14_IRQ
R12_FIQ
R13_FIQ R14_FIQ
PC
CPSR
PC
CPSR SPSR_SVC
PC
CPSR SPSR_ABORT
31 30 29 28 27 26 N Z C V Q 保留
8 I
7
6 5
4
3
2
1
0
F T M4 M3 M2 M1 M0
第1章 嵌入式系统设计基础
6
CPSR/SPSR
条件标志(Condition Code Flags) N = ALU计算结果为负数(Negative result from ALU(Arithmetic Logical Unit ) flag)。 Z = ALU计算结果为0(Zero result from ALU flag)。 C = ALU计算结果进位(ALU operation Carried out)。
工作模式
用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq)
功能 正常的程序执行状态 用于高速数据传输或通道处理 用于通用的中断处理 操作系统的保护模式 用于虚拟存储及存储保护
M[4:0] 10000 10001 10010 10011 10111
管理模式(svc) 中止模式(abt)
第1章 嵌入式系统设计基础
11
ARM指令的条件码
0000
0001 0010 0011 0100 0101 0110
EQ
NE CS/HS CC/LO MI PL VS
Z置位
Z清0 C置位 C清0 N置位 N清0 V置位
相等/等于0
不等 进位/无符号高于或等于 无进位/无符号低于 负数 非负数 溢出
0111
;/*指定函数的入口*/
;/*把#0xFF传送到R0*/ ;/*把#0XEF000000传送到R1*/ ;/*把#0x2F000000传送到R2*/
;/*把#0xFF取反后传送到R3*/ ;/*把R2加R1的值传送到R4*/ ;/*把R2加R1的值传送到R5,s表示会影响 ;/*把R2加R1的值,再加上carry的值后传送到 ;s表示值会影响cpsr*/
Rd=op1
Rd=!op1 Rd=Rn+op2 Rd=Rn+op2+carry Rd=Rn-op2 Rd=op2-Rn
第1章 嵌入式系统设计基础
23
加減法指令及例程
AREA EXAMPLE3,CODE,READONLY CODE*/ ENTRY START MOV R0,#0xFF MOV MOV MVN ADD ADDS cpsr*/ ADCS R6. R1,#0xEF000000 R2,#0x2F000000 R3,#0Xff R4,R2,R1 R5,R2,R1 R6,R2,R1 ;/*声明一段名为EXAMPLE3的
PC
CPSR SPSR_UNDEF
PC
CPSR SPSR_IRQ
PC
CPSR SPSR_FIQ
为什么需要R13,R14,SPSR?
第1章 嵌入式系统设计基础 4
ARM的寄存器组织
1.通用寄存器:包括R0~R15,以及程序计数器PC . R0~R7称为不分组寄存器; R8~R12有两组物理寄存器。
一组属于快速模式(R8_fiq~R12_fiq) 另一组属于其它模式(R8_usr~R12_usr) ; 其中用户模式和系统模式共用一组 寄存器R13通常作为堆栈指针SP (stack pointer) 寄存器R14常用作连接寄存器LR(link register);
R13和R14有6组物理寄存器。
FIQ
保留 软件中断
FIQ
保留 管理模式
3
10
第1章 嵌入式系统设计基础
ARM指令编码方式
<opcode>
{<cond>}
{S}
<Rd>, <Rn>
{,<opcode2>}
其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令 助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果 不写则使用默认条件AL(无条件执行)。其中: Opcode:指令助记符,如LDR,STR 等。 Cond:执行条件,如EQ,NE 等。 S:是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响。 Rd:目标寄存器。 Rn:第一个操作数的寄存器。 operand2:第二个操作数。
嵌入式ARM系统汇编语言
第3章 ARM程序设计基础
1 2 3 4
ARM处理器工作模式及寄存器功能 ARM寻址方式 ARM指令及应用程序设计 ARM伪指令及应用程序设计 ARM汇编程序设计实例
5
ARM处理器模式
除用户模式之外的其余6种称为非用户模式 (特权模式) 在特权模式中,除系统模式之外的其余5种又称为异常模式 不同的工作模式间可以相互切换。
VC
V清0
无溢出
第1章 嵌入式系统设计基础
12
ARM指令的条件码(续)
1000 HI C置位且Z清0 无符号高于
1001 1010
1011 1100 1101 1110
LS GE
LT GT LE AL
C清0或Z置位 N等于V
N不等于V Z清0且N等于V Z置位或N不等于V 任何状态
无符号低于或等于 有符号大于或等于
未定义指令模式und
系统模式(sys)
用于支持硬件协处理器的软件仿真
运行特权级的操作系统任务
11011
11111
第1章 嵌入式系统设计基础
3