1 / 11
文档名称:

arm汇编简介.doc

格式:doc   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

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

分享

预览

arm汇编简介.doc

上传人:xxj16588 2016/5/18 文件大小:0 KB

下载得到文件列表

arm汇编简介.doc

相关文档

文档介绍

文档介绍:arm 汇编简介 1 状态寄存器传送至通用寄存器类指令功能:将状态寄存器的内容传送至通用寄存器。格式: MRS{< 条件码>}Rd,CPSR}SPSR 其中: Rd 目标寄存器, Rd 不允许 R15 。 R=0 将 CPSR 中的内容传送目的寄存器。 R=1 将 SPSR 中的内容传送至目的寄存器。注释: MRS 与 MSR 配合使用,作为更新 PSR 的读- 修改- 写序列的一部分。例如: 改变处理器或清除标志 Q。注意: 当处理器在用户模式或系统模式下,一定不能试图访问 SPSR 这条指令不影响条件码标志。例: MRS R0, CRSR ;将 CPSR 中的内容传送至 R0 MRS R3, SPSR ;将 SPSR 中的内容传送至 R3 2 通用寄存器传送至状态寄存器传送指令功能:将通用寄存器的内容传送至状态寄存器。格式: MSR{< 条件码>CPSR_f|SPSR_f,<#ommed_8r> MSR{< 条件码>CPSR_<field>|SPSR_<field>,Rm 其中: <field> 字段可以是以下之一或多种: ( 位从右到左) C :控制域屏蔽字段( PSR 中的第 0 位到第 7 位); X :扩展域屏蔽字段( PSR 中的第 8 位到第 15 位); S :状态域屏蔽字段( PSR 中的第 16 位到第 32 位); F :标志域屏蔽字段( PSR 中的第 24 位到第 31 位)。 immed_8r 值数字常量的表达式。常量必须对应 8 位位图。该位图在 32 位字中循环移位偶数数位。 Rm 源寄存器。注释: 同前一条指令( MRS )。例1 :设置 N、Z、C、V 标志。 MSR CPSR_f,#&f0000000 ; 仅高位有效, 其他必须为 0例2: 仅置位 C 标志,保留 N、Z、V 标志。 MRS R0, CPSR ;将 CPSR 中的内容传送至 R0 ORR R0, R0, #&1f ;置位 R0 的第 29位 MSR CPSR_c,R0 ;再将 R0 中的内容传送至 CPSR 例子:设置 cpu 工作在超级保护模式(SVC32) ***@set the cpu to SVC32 mode mrs r0,cpsr @把 CPSR 内容存入 r0. 使用了 mrs 指令: 专用寄存器到通过寄存器的存取. ***@CPSR 当前程序状态寄存器格式如下: @ 31 30 29 28 27 26 25 24~~~87654 3210@ ___ ___ ___ ___ ___ ___ ___ ___ ____ ___ ___ ___ ____ ____ ____ ____ ____ @|N|Z|C|V|*|*|*|*|***|I|F|T| M4| M3| M2| M1| M0|@ bic r0,r0,#0x1f ***@bic 指令(bit clear): r0:= r0 and (not op2). 上边的指令目的是把 bit0~bit4 清零. orr r0,r0,#0xd3 ***@r0:= r0 or 0xd3 . 以上三条指令执行后 r0 值为:**** **** **** **** **** ***** 11*1 0011 msr cpsr,r0 @把r0存于 cpsr. 注意:ms r 指令是专用的通用寄存器到特殊功能寄存器的指令与 mrs 对应说明: 通过上边的指令可以看到, ,disable 外部中断(IRQ) 与快速中断(FIR).2, 把系统设为 SVC32 状态( 超级保护)即 M4~M1=10011 LDR 和 STR ——用于字和无符号字节指令格式: LDR/STR{cond}{T} Rd,< 地址> LDR/STR{cond}B{T} Rd,< 地址> LDR{cond}{T} Rd,< 地址> 加载指定地址的字数据到 Rd 中; STR{cond}{T} Rd,< 地址> 存储 Rd 中的字数据到指定的地址单元中; LDR{cond}B{T} Rd,< 地址> 指令加载指定地址的字节数据到 Rd 的的最低字节中( Rd 的高 24 位清零); STR{cond}B{T} Rd,< 地址> 指令存储 Rd 中的最低字节数据到指定的地址单元中。 T 为可选后缀, 若有 T, 那么即使处理器是在特权模式下, 存储系统也将访问看成处理器是在用户模式下, T 在用户模式下无效,不能与前索引偏移一起使用 T。地址部分可用的形式有 4 种: 零偏移(zero offset) [Rn] , Rn 的值作为传送数据的地址。如: LDR R0,[R1] ; 前索引偏移(pre-indexed offset) [Rn , Flexoffset]{!} 在数据传送之前,将偏移量 Flexoffset