arm课件第3章1
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北华航天工业学院 房好帅 fanghaoshuai@
(3)后索引寻址(post-indexed addressing)形式 [Rn],<#expression> expression为常数偏移量(-4095至+4095),Rn称为基址寄 存器; STR R3,[R1], #8 ;将寄存器R3内容写入存储器,地址为R1,并将新地址R1 +8写入R1; [Rn],{+/-}Rm{,<shift>} <shift>为寄存器移位操作;
北华航天工业学院 房好帅 fanghaoshuai@
一个简单的ARM汇编语言程序实现1+2+…+10如下:
AREA my_pj,CODE,READONLY ENTRY MOV R0, #10 在ARM汇编程序中, MOV R1, #1 类似MOV R0, #10 MOV R2, #0 为ARM指令; add_loop ADD R2, R2, R1 ADD R1, R1, #1 CMP R1, R0 AREA、DCD等称为伪操作, BLS add_loop LDR R3, =result_var 用来进行定义程序结构,分 配存储空间等功能; STR R2, [R3] NOP ALIGN AREA my_dt,DATA,READWRITE result_var DCD 0x00000000 END 北华航天工业学院 房好帅 fanghaoshuai@
北华航天工业学院 房好帅 fanghaoshuai@
STR{cond}{B}{T} Rd, <Address>
其中< >号内的项是必须的,{ }号内的项是可选的;
将Rd寄存器内容存放到<Address>指定的地址; {cond} 为指令执行条件,与CPSR的N Z C V位对应; {B} 存字节(Rd低8位)到指定地址; {T} 用于特权模式下程序以用户模式的权限执行; <Address>存放地址,支持多种寻址方式,同LDR;
算术右移Arithmetic Shift Right (ASR)
OPR
CPSR C位
循环右移Rotate right (ROR)
OPR
CPSR C位
北华航天工业学院 房好帅 fanghaoshuai@
带扩展的循环右移rotate right extended (RRX)
OPR
CPSR C位
北华航天工业学院 房好帅 fanghaoshuai@
2、批量数据加载、存储指令(LDM、STM)
LDM{cond}<mode> Rn{!},<Rlist>{^}
其中< >号内的项是必须的,{ }号内的项是可选的;
<mode>可选FD、ED、FA、EA、IA、IB、DA、DB;
{!} 为地址回写标志;
<Address>地址部分,支持多种寻址方式如下:
(1)基于PC的标号(可加减常量) AREA my_pj,CODE,READONLY ENTRY MOV R1,#0x00000099 STR R1,label_mem+4 label_ins label_mem LDR R2,label_mem 位于指令前的标号或数 LDR R3,label_ins+4 据定义伪操作前的标号, label_ins 汇编时被处理为相对 MOV R4,#0x00000002 PC的一个偏移量 MOV R5,#0x00000003 NOP NOP B label_ins ALIGN AREA my_dt,DATA,READWRITE label_mem DCD 0x01020304,0x05060708,0x0A0B0C0D END
含义 相等 不相等 无符号数大于或等于 无符号数小于 负数 正数或零 溢出 未溢出
{d} HI LS GE LT GT LE AL
CPSR位 含义 C置位Z清零 无符号数大于 C清零Z置位 无符号数小于或等于 N等于V 带符号数大于或等于 N不等于V 带符号数小于 Z清零且(N等于 带符号数大于 V) Z置位或(N不等 带符号数小于或等于 于V) 忽略 无条件执行
北华航天工业学院 房好帅 fanghaoshuai@
[Rn,{+/-}Rm{,<shift>}]{!} <shift>为寄存器移位操作,移位量必须为常数,操作包括: 逻辑左移Logical Shift Left (LSL)或算术左移ASL 逻辑右移Logical Shift Right (LSR) 算术右移Arithmetic Shift Right (ASR) 循环右移Rotate right (ROR) 带扩展的循环右移1位Rotate right extended (RRX) LDR R3,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R3; LDR R3,[R1,R2,LSL#3]! ;将存储器地址为 [R1+(R2逻辑左移3位)] 的字数据读入寄存 器R3,并将新地址 [R1+(R2逻辑左移3位)] 写入R1; STR R3,[R1,-R2,LSL#2] ;将寄存器R3内容存入存储器,地址为R1-(R2逻辑左移2位); LDR R3,[R1,R2, RRX] ;将地址为[R1+(R2带扩展循环右移1位)]的字读入R3;
北华航天工业学院 房好帅 fanghaoshuai@
AREA my_pj,CODE,READONLY ENTRY MOV R1,#0x00000099 STR R1,label_mem+4 LDR R2,label_mem LDR R3,label_ins+4 label_ins label_ins表示MOV MOV R4,#0x00000002 R4,#0x00000002相对PC MOV R5,#0x00000003 的偏移量 NOP NOP B label_ins ALIGN AREA my_dt,DATA,READWRITE label_mem DCD 0x01020304,0x05060708,0x0A0B0C0D END label_mem表示这三个字的内存首地 址相对PC的偏移量
ARM微处理器
北华航天工业学院 房好帅 fanghaoshuai@
1、单个数据加载、存储指令(LDR、STR)
LDR{cond}{B}{T} Rd, <Address>
其中< >号内的项是必须的,{ }号内的项是可选的;
将<Address>指定地址的内容读取到Rd寄存器; {cond} 为指令执行条件,与CPSR的N Z C V位对应; {B} 读取字节,放在Rd低8位,Rd高24位清零; {T} 用于特权模式下程序以用户模式的权限读存储器; <Address>读取的地址,支持多种寻址方式;
注意事项:
(1)基于PC的标号偏移,其范围为上下4KB;
(2)地址不能写回到R15(PC),即基址寄存器Rn为 R15时,不能有“!”;
(3)前索引带“!”和后索引寻址时,Rn与Rd不能为同一 寄存器;
另外,LDRH/STRH/LDRSB/LDRSH指令用来进行读取与 存储半字,与LDR/STR指令用法类似,请大家课下阅读 Datasheet的HALFWORD AND SIGNED DATA TRANSFER (LDRH/STRH/LDRSB/LDRSH)部分。
其中< >号内的项是必须的,{ }号内的项是可选的;
<mode>可选FD、ED、FA、EA、IA、IB、DA、DB;
{!} 为地址回写标志;
<Rlist>为寄存器列表,标号从小到大写; 如:{R0,R2,R5},{R0,R2-R4}; 按照寄存器号从大到小的顺序传输数据到存储器; 将寄存器列表中的多个寄存器的值写到基址寄存器Rn指 定的一块内存中;
LDR R3,label_ins+4 R3内容为0xE3A05003, label_ins 即MOV R5,#0x00000003的二 MOV R4,#0x00000002 进制表示 MOV R5,#0x00000003 NOP NOP B label_ins ALIGN AREA my_dt,DATA,READWRITE label_mem DCD 0x01020304,0x05060708,0x0A0B0C0D END
LDR R3,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R3,并将新地址R1+ R2写入R1; LDR R3,[R1],R2,LSL#3 ;将存储器地址为R1的字数据读入寄存器R3,并将新地址R1+ R2×8写入R1;
北华航天工业学院 房好帅 fanghaoshuai@
第3章 ARM指令系统与程序设计
本章内容: (1)ARM常用指令介绍; (2)ARM伪指令与伪操作; (3)ARM汇编语言程序设计; (4)ARM汇编与C语言混合编程; ARM920T处理器支持32位ARM指令与16位Thumb指令,本章介 绍常用的ARM指令,Thumb指令不涉及;除介绍的指令外,更多 ARM指令及Thumb指令可查阅S3C2440手册(datasheet)。
<Rlist>为寄存器列表,标号从小到大写; 如:{R0,R2,R5},{R0,R2-R4}; 将基址寄存器Rn指定的一块内存内容读到寄存器列表中 的多个寄存器中;
北华航天工业学院 房好帅 fanghaoshuai@
STM{cond}<mode> Rn{!},<Rlist>{^}
labelinslabelmem位于指令前的标号或数据定义伪操作前的标号汇编时被处理为相对pc的一个偏移量areamypjcodereadonlyentrymovr10x00000099strr1labelmem4ldrr2labelmemldrr3labelins4labelinsmovr40x00000002movr50x00000003nopnoplabelinsalignareamydtdatareadwritelabelmemdcd0x010203040x050607080x0a0b0c0dend北华航天工业学院anghaoshuaigmailcomlabelins表示movr40x00000002相对pc的偏移量labelmem表示这三个字的内存首地址相对pc的偏移量areamypjcodereadonlyentrymovr10x00000099strr1labelmem4ldrr2labelmemldrr3labelins4labelinsmovr40x00000002movr50x00000003nopnoplabelinsalignareamydtdatareadwritelabelmemdcd0x010203040x050607080x0a0b0c0dend北华航天工业学院anghaoshuaigmailcom0x05060708所在内存变为0x00000099r2内容为0x01020304r3内容为0xe3a05003即movr50x00000003的二进制表示2前索引寻址preindexedaddressing形式rnldrr3r4
北华航天工业学院 房好帅 fanghaoshuai@
{cond}条件标志共有15种,对应于CPSR的相关位, 若加上条件标志,则满足执行条件时才执行指令功能;
{cond} EQ NE CS CC MI PL VS VC
CPSR位 Z置位 Z清零 C置位 C清零 N置位 N清零 V置位 V清零
3.1 ARM常用指令介绍 在S3C2440Datasheet中,列出了ARM9基本指令有34条,功能 如下: (1)存储器访问指令; (2)数据处理指令(主要是运算、数据比较指令); (3)跳转指令(实现程序分支与循环结构、函数调用); (4)程序状态寄存器访问指令; (5)软中断指令; (6)协处理器指令。
北华航天工业学院 房好帅 fanghaoshuai@
逻辑左移Logical Shift Left (LSL),或算术左移ASL
CPSR C位
OPR 0
逻辑右移Logical Shift Right (LSR)
OPR 0
CPSR C位
北华航天工业学院 房好帅 fanghaoshuai@
北华航天工业学院 房好帅 fanghaoshuai@
(2)前索引寻址(pre-indexed addressing)形式 [Rn] LDR R3,[R4] ;R4内容作为访存地址,将该地址数据读入寄存器R3; LDREQ R3,[R4] ;带条件码的指令,当CPSR中Z为1时执行访存,否则为空 操作; [Rn,<#expression>]{!} expression为常数(-4095至+4095)偏移量,{!}为地址写回 标志;Rn称为基址寄存器; LDR R3,[R1, #8] ;将存储器地址为R1+8的字数据读入寄存器R3; STR R3,[R1, #8]! ;将寄存器R3内容写入存储器,地址为R1+8,并将新地址 R1+8写入R1;
北华航天工业学院 房好帅 fanghaoshuai@
AREA my_pj,CODE,READONLY ENTRY MOV R1,#0x00000099 0x05060708所在内存 STR R1,label_mem+4 变为0x00000099
LDR R2,label_mem
R2内容为0x01020304
北华航天工业学院 房好帅 fanghaoshuai@
3.1.1 存储器访问指令
对于ARM处理器所有的外设接口寄存器和主存存储 单元采用统一编址,访问外设接口的寄存器和主存 采用的指令相同;
数据从存储器(或外设接口寄存器)到内部寄存器的传送 称为加载; 数据从内部寄存器到存储器(或外设接口寄存器)的传送 称为存储。 存储 内部寄存器 存储器或外设 (R0-15) 加载 接口寄存器