课程列表

基本问题

开源资源

好好学习天天向上

联大大纲—通信电子 ;教师介绍; 单片机课程学习经验- 学习路线图; 1.概述 -应用 -定义 -特点 -构成; 2.嵌入式处理器 —DIY CPU处理器ARM处理器Cortex-A8S5PV210讨论; 3.汇编语言 -作业 4.Bootloader -作业 5.Linux内核移植 6.嵌入式Linux程序设计 7.图形用户接口QT 8.其他框架介绍; 9.嵌入式物联网应用系统设计

ARMv7指令集

一条指令中使用操作数字段来描述指令功能。不同的功能需要由不同的操作数来描述,结合寻址方式构成一条完整的指令。一款微处理器所能运行的所有汇编指令合集简称为指令集

 

ARM汇编指令分类:跳转指令、数据处理指令、程序状态寄存器访问指令、load/store指令(存储器访问指令)、异常产生指令和协处理器指令。

==========================================

from:ARM architecture reference manual ARMv7-A ARMv7-R

Chaper A4: The instruction sets

This chapter describes the ARM and Thumb instruction sets. It contains the following sections:
• About the instruction sets on page A4-160
• Unified Assembler Language on page A4-162
• Branch instructions on page A4-164
• Data-processing instructions on page A4-165
• Status register access instructions on page A4-174
• Load/store instructions on page A4-175
• Load/store multiple instructions on page A4-177
• Miscellaneous instructions on page A4-178
• Exception-generating and exception-handling instructions on page A4-179
• Coprocessor instructions on page A4-180
• Advanced SIMD and Floating-point load/store instructions on page A4-181
• Advanced SIMD and Floating-point register transfer instructions on page A4-183
• Advanced SIMD data-processing instructions on page A4-184
• Floating-point data-processing instructions on page A4-191.

==========================================

1 跳转指令

指令格式:B{L}{<cond>} <target_address>

指令功能:相对跳转指令,跳转范围为当前位置±32MB范围内。

B:跳转指令助记符;BL:存储跳转返回地址,可实现函数调用。

 

范例

B   label  ;无条件转移到标号为label的指令处

BEQ   label   ;有条件(Z=1)转移到标号为label的指令处

MOV   PC, #0   ;跳转到0x0000_0000地址处

BL   func   ;调用func子程序

func:  ;定义函数名

…  ;定义函数体 

MOV   PC, LR   ;R15=R14,恢复断点,实现子程序调用返回

LDR   PC, =func   ;将函数func存放地址加载到程序计数器

2 数据处理指令:

ADC  R5,R1, R3    ;R4 = R0+R2+C

ADD R2, R10, R10, LSR #1   ;R2 = R10+R0*2

ANDS  R3, R0, #0x7000000  ;R3= R0 & 0x7000000, 影响CPSR寄存器

BIC      R0, R0, #0x00002000  ;R0= R0 & !#0x00002000,   R0[13]=0

CMP   R5,  R4  ;比较 R5, R4

BEQ  board_init_in_ram  ;R5=R4,则跳转到board_init_in_ram

ORR     R0,   R0, #1<<1;R0 = R0|1<<1,   R0[1]=1

SUB   R0,  R0,#1   ;R0=R0-1

 

MUL   R4, R2, R1   ;乘   R4 = R2 * R1

MLA   R7, R8, R9, R3     ;乘加   R7 = R8 * R9 + R3

UMULL  R6, R8, R0, R1   ;无符号乘   R8, R6 = R0 x R1

UMLAL  R5, R8, R0, R1   ;无符号乘加长R8, R5 = R0 x R1 + R8, R5

3 存储器访问指令

助记符LDR实现读存储单元内容,助记符STRB实现存储单元写操作。

 

LDR   R1, [R0]   ;R1 = [R0]

LDR   R8, [R3, #4]   ;R8 = [R3+4]

LDR   R11, [R1, R2]   ; R11 = [R1 + R2]

STR   R2, [R1, #0x100]   ; [R1+0x100] = R2

 

STMFD R13!, {R0 - R12, LR}  ;R13=SP,R0R12LR入栈。

LDMFD  R13!, {R0 - R12, PC}  ;数据出栈,存入R0R12PC

LDMIA   R0, {R5 - R8}             ;连续读取数据到存入R5-R8

STMDA   R1!, {R2 - R11}      ;R2-R11的数据保存到存储器中。

 

4、程序状态寄存器访问指令
 

助记符MRS实现读CPSR内容到通用寄存器。
助记符MSR实现将通用寄存器内容写入CPSR。

指令范例
(1)清标志位
MRS R0, CPSR ;读 R0=CPSR
BIC R0, R0, #0xF0000000 ;清N、Z、C、V
MSR CPSR_f, R0 ;写 CPSR标志域, N、Z、C、V、Q =0
(2)禁止IRQ中断
MRS R0, CPSR ;读 R0=CPSR
ORR R0, R0, #0x80 ;I=1
MSR CPSR_c, R0 ;回写CPSR控制域
(3)设置FIQ模式
MRS R0, CPSR ;读 CPSR
BIC R0, R0, #0x1F ;清mode对应位
ORR R0, R0, #0x11 ;置FIQ工作模式位
MSR CPSR_c, R0 ;回写CPSR控制域

 

5、存储器块访问指令

指令格式
LDM{<cond>}<addressing_mode> Rn{!}, <registers>{^} ;连续读
STM{<cond>}<addressing_mode> Rn{!}, <registers>{^} ;连续写
指令范例
STMFD R13!, {R0 - R12, LR} ;R13=SP,将R0~R12,LR入栈。满递减堆栈。
LDMFD R13!, {R0 - R12, PC} ;数据出栈,存入R0~R12,PC。
LDMIA R0, {R5 - R8} ;连续读取数据到存入R5-R8。
STMDA R1!, {R2 - R11} ;将R2-R11的数据保存到存储器中。
 

6、寄存器和存储器交换指令
指令范例
SWP R12, R10, [R9] ;R12 =[R9] ,[R9] = R10
SWPB R3, R4, [R8] ;交换字节
 

7、异常产生指令
指令范例
BKPT ;断点

from:http://infocenter.arm.com/help/basic/help.jsp?topic=/com.arm.doc.dui0204ic/Cihbiggi.html

4.10.1. BKPT

断点。

语法

BKPT #immed

其中:

immed
是一个表达式,其取值为以下范围内的一个整数:
  • 在 ARM 指令中,为 0-65535(16 位值)
  • 在 16 位 Thumb 指令中为 0-255(8 位值)。

用法

BKPT 指令可使处理器进入调试状态。 当指令到达某个特定地址处时,调试工具可以使用此指令来检查系统状态。

在 ARM 状态和 Thumb 状态中,ARM 硬件都会忽略 immed。不过,调试器可用它来存储断点的其他信息。

体系结构

此 ARM 指令可用于 ARMv5 及更高版本。

此 16 位 Thumb 指令可用于 ARMv5 及更高版本的 T 变体。

此指令无 32 位 Thumb 版本。

Copyright © 2002-2008 ARM Limited. All rights reserved. ARM DUI 0204IC
Non-Confidential

 

 


SWI ;软件中断
 

8、协处理器指令

协处理器(coprocessor),一种芯片,用于减轻系统微处理器的特定处理任务。

指令助记符

CDP:协处理器数据操作指令。

LDC:协处理器数据读取指令。

STC:协处理器数据写入指令。

MCR:ARM寄存器到协处理器寄存器的数据传送指令。

MRC:协处理器寄存器到ARM 寄存器到的数据传送指令。

举例

CDP{cond} coproc, opcodel, CRd, CRn, CRm{,opcode2}

在上述指令格式中:

coproc 指令操作的协处理器名。标准名为pn,n 为0~15。

opcodel 协处理器的特定操作码。

CRd 作为目标寄存器的协处理器寄存器。

CRN 存放第1个操作数的协处理器寄存器。

CRm 存放第2个操作数的协处理器寄存器。

Opcode2 可选的协处理器特定操作码。