1ARM指令系统
2指令系统简介
ARMv7指令体系包括ARM和Thumb两种指令集。处理器工作在ARM状态,指令ARM指令;Thumb状态执行Thumb指令。所有ARM指令长度为32位,指令以字对齐方式保存在存储器中,所有的Thumb指令长度都是16位,指令以半字节方式保存在存储器中。大多数ARM指令都可以条件执行,而Thumb指令中只有一条具备条件执行的功能。
大多数ARM指令在一个周期内都可以完成,ARM体系的指令集中只有载入和存储(LDR/STR)指令可以访问存储器,数据处理指令只对寄存器的内容进行操作。
3ARM指令的编码格式
31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0 |
---|---|---|---|---|---|---|
cond | xxx | opcode | S | Rn | Rd | shifter_operand |
- cond: 指令执行的条件码;
- opcode: 指令操作码编码;
- S:决定指令是否影像CPSR(当前程序状态寄存器)的值;
- Rn:包含第一个源操作数的寄存器编码;
- Rd:目标寄存器的编码;
- shift_opreand:第二个源操作数;
一条典型的ARM指令语法格式如下:
<code> {<cond>} {S} <Rd>,<Rn>,<shifter_operand>
- opcode:指令助记符,表示指令功能,如ADC表示加法;
- cond:指令执行条件,如EQ表示相等时执行;
- S:默认情况下,数据处理指令影像条件码标志位,当可以选择通过添加“S”来影响,有些指令如CMP不需要添加“S”就可以改变相应的标志位。一般情况下,需要影像CPSR的值则加上“S”,否则不加。
- Rd:目标寄存器;
- Rn:包含第一个源操作数的寄存器;
- shifter_operand:第二个源操作数。
“<>”中的内容必需,“{}”中的内容可选。如:
ADDEQS R0,R1,#6
该指令表示,相等时(Z标志等于1,即Z=1)执行操作R0=R1+6,执行结果影响CPSR的值。
ARM指令的条件码域
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行。当指令的执行满足条件时,指令被执行,否则指令被忽略,继续执行下一条指令。
操作码 | 条件助记符 | 标志 | 含义 |
---|---|---|---|
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 | 任何 | 从不执行(不要使用) |
每一条ARM指令包含4位条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两字节表示,这两个字符可以天剑在指令助记符的后面,和指令同时使用。例如:跳转指令B可以加上后缀EQ变为BEQ,表示:相等则跳转,即当CPSR中的Z标志位置位时发生条状。
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩