ARM处理器有37个寄存器,其中31个通用寄存器,6个程序状态寄存器。

R0~R7为不分组的通用寄存器,R8~R14为分组寄存器---不同工作模式下寄存器不同

R13:指向堆栈栈顶指针SP

R14:用作程序链接寄存器LR--指向函数的返回地址

R15:程序计数器pc--记录程序运行的位置

程序状态寄存器:

CPSR:保存程序运行的状态

SPSR:只有异常模式存在,保存CPSR的值,又分为SPSR_SVC SPSR_abt SPSR_und SPSR_IRQ

SPSR_UND

CPSR/SPSR寄存器格式:

低五位决定工作模式: 用户模式 FIQ快速中断 IRQ中断 管理状态 中止 未定义

系统。

第六位(T)决定工作状态: 1 Thumb 0 ARM

第七位(F)快速中断禁止位:1 允许 0 禁止

第八位(I)IRQ中断禁止位: 1 允许 0 禁止

.

.

.

高四位:条件码标志位

汇编指令:

1、跳转指令

B{条件} 目标地址

BL 跳转返回:跳转时将PC指针记录在LR中 返回时:MOV PC LR

2、MOV指令

MOV 寄存器 源操作数(立即数 寄存器)

3、MVN指令

MVN 寄存器 源操作数(立即数 寄存器)

将源操作取反存入寄存器中

4、CMP指令

CMP 操作数1 操作数2

根据比较结果更新CPSR的位

5、TST 测试指令

TST{条件}操作数1 操作数2

用于把寄存器的内容和另一个寄存器或立即数按位与,根据测试结果更新CPSR的值

6、ADD指令

ADD 寄存器 操作数1 操作数2

7、SUB指令

SUB 寄存器 操作数1 操作数2

8、AND逻辑与指令

AND 寄存器 操作数1 操作数2

9、ORR 逻辑或

ORR 寄存器 操作数1 操作数2

10、BIC位清零指令

BIC 寄出器 操作数1 操作数2

BIC R0 R1(0xff) #0x03 等于 r0= R1&(~0x03)

= 0xfc

11、MUL乘法指令

MUL 寄存器 操作数1 操作数2

程序状态寄存器访问指令

MRS{}通用寄存器 程序状态寄存器

MRS R0 CPSR 将CPSR中的值给R0

MSR{}程序状态寄存器 通用寄存器(立即数)

MSR SPSR R0 将R0赋值给SPSR

MSR CPSR #0x77 将立即数赋值给CPSR

示例:

存储器指令---加载存储指令

LDR指令

LDR R0 [R1]将存储器地址为R1的数据读出来存在寄存器R0当中----寄存器间接寻址

LDR R0 [R1+R2]将存储器地址为R1+R2的数据读入寄存器R0当中----寄存器间接寻址

LDR R0 [R1+#8]将存储器地址为R1+8的数据读入寄存器R0当中

LDR R0 [R1+R2]!

将存储器地址为R1+R2的户数读入寄存器R0当中,并将R1+R2的新地址存入R1当中

LDRB指令

LDR{}B 寄存器 存储器

把存储器低8位数取出来存在寄存器R0中,并将R0的高24位清0

LDR{}H指令 寄存器 存储器

把存储器低16位数取出来存在寄存器R0中,并将R0的高16位清0

STR指令

STR{}源寄存器 存储器地址

STR用于将源寄存器中的数据一个32位的数传送到存储器中

STR R0, [R1], #8;将R0中数据写入以R1为地址的存储器当中,并将新地址R1+8.

STR R0,[R1+R2+#8];将R0中数据写入以R1+R2+8为地址的存储器中

LDM、STM指令--在一片连续存储空间和多个寄存器之间传输数据

常见用途:将多个寄存器内容入栈或出栈

LDM/STM 寄存器列表 {存储}

示例:LDMFD R13!,{R0,R4-R12,PC};将堆栈内容恢复到寄存器(R0,R4到R12和PC);

STMFD

R13!,{R0,R4-R12,PC};将寄存器列表中的寄存器存入到堆栈。

SWAP交换指令

SWAP 目的寄存器 源寄存器 存储器

将存储器中的数据存入目的寄存器中,再将源寄存器中的数存入存储器中

SWAP R0 R1 [R2]

SWAP R0 R0 [R2]

移位指令:其不作为单独的指令使用,它只作为指令格式中的一个字段,移位操作包括5种类型

逻辑左移:LSL MOV R0,R1,LSL#2;将R1左移2位赋值给R0;

算术左移:ASL MOV

R0,R1,ROR#2;将R1循环右移2位赋值给R0;

逻辑右移:LSR

算术右移:ASR

循环右移:ROR MOV R0,R1,ROR#2;将R1循环右移2位赋值给R0;

异常产生指令:

SWI 软件中断指令

BKPT 断点中断指令

伪指令

分为符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令

一.符号定义伪指令:用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名;

常见的符号定义伪指令有如下几种:

定义全局变量的GBLA、GBLL和GBLS;

定义局部变量的LCAL、LCLL和LCLS;

对变量赋值的SETA、SETL、SETS;

为通用寄存器列表定义名称的RLIST。

语法格式:

1、GBLA(GBLL/GBLS) 全局变量名

含义:用于定义一个ARM程序中的全局变量,并将其初始化。

GBLA:定义一个全局的数字变量,并将其初始化为0。

GBLL:定义一个全局的逻辑变量,并初始化为假FALSE。

GBLS:定义一个全局的字符串变量,并初始化为空。

示例:

GBLA tes1 定义一个全局数字变量tes1

以上三条伪指令用于定义全局变量,所以变量名在程序中应该唯一。

2、对变量赋值

SETA:对数字变量赋值;

SETL:对逻辑变量赋值;

SETS:对字符串变量赋值;

示例:

GBLA tes

tes SETA 0xaa

GBLL tes1

tes1 SETL {TRUE}

GBLS tes3

tes3 SETS "nihao"

3、对一个通用寄存器列表定义名称

语法格式:RLIST {寄存器列表}

RLIST伪指令用于对一个寄存器列表定义名称,

使用该伪指令定义的列表名称可在ARM指令LDM/STM中使用。

LDM/STM指令中,列表中的寄存器访问次序是根据寄存器的编号顺序由高到低,

与列表中的寄存器排名无关。

使用示例

RSGlist RLIST {R0-R5,R8,R14};将寄存器列表定义为RSGlist。

二、数据定义伪指令

1、DCB 用于分配一片连续的字节存储单元并初始化。

语法格式:标号 DCB 表达式

示例:str DCB "THis is china" ,DCB也可以用“=”代替。

2、SPACE 分配一定大小字节的空间

语法格式:标号 SPACE 表达式

示例:buf SPACE 100; 连续分配100字节大小的空间,SPACE也可以用“%”代替。

3、MAP指令 定义一个结构化的寄存器的首地址

语法格式:MAP 表达式{,基址寄存器}

表达式可以为程序中的表号或数字表达式,基址寄存器位可选项

示例:MAP 0x100,R0 定义结构化首地址的值为0x100和R0,MAP也可以用“^”代替。

4、FIELD指令 定义一个结构化内存表中的数据域

语法格式:标号 FIEL 表达式

与MAP一起使用

MAP 0X100;

A FIELD 16 定义A的长度16字节,位置为0X100;

三、汇编控制伪指令

常见伪指令:

IF、ELSE、ENDIF

WHILE WEND

MACRO、MEND

MEXIT

1、IF指令 相当于C语言中的“if”

2、WHILE指令 相当于“while”

四、其他伪指令

1、AREA指令 用于定义一个代码段或数据段

AREA 段名 属性1,属性2

CODE属性:定义代码段,默认为READONLY

DATA属性:定义数据段,默认为READWRITE,

READONLY属性:本段刻度

READWRITE属性:本段可读可写

2、ALIGN指令 按字节对齐

AREA init,CODE,READONLY,ALIGN = 3;指定后面的代码段为8字节对齐,2^3;

3、CODE16 CODE32 16是THUMB指令 32是ARM指令

AREA init,CODE,READONLY,ALIGN = 3;

.....

CODE32;通知编译器后面的指令为32位的ARM指令。

4、ENTRY 指定汇编程序的入口点 相当于C语言中的“main”

5、EQU 宏定义 相当于C语言中的“#define”

语法格式:名称,EQU,表达式

示例:tes1 EQU 50;定义tes1的值为50;

6、EXPORT指令

语法格式:EXPORT 标号 声明一个全局可以引用的标号;

7、IMPORT

语法格式:IMPORT 标号,别的程序输出,自己导入

8、END 表明程序结束。

linux命令mov,汇编指令_Y-linuz-linux-w_新浪博客相关推荐

  1. Linux学习之查看log与查看进程_Sinno_Song_新浪博客

    一.查看Log tail命令 tail命令可以对需要查看文件进行筛选,选择从第几行开始显示,显示到第几行结束. 如果不添加任何参数,表示显示文件的后10行. tail +10 my_file 表示从文 ...

  2. sfc /scannow扫描修复系统文件命令怎么用_马立杰_新浪博客

    Windows操作系统的CMD命令有多种,sfc /scannow是使用率较高的一直,用于扫描和校对当前系统文件,修复缺失/异常的系统文件.如果检测到受保护的系统文件被不正确的文件覆盖会从dllcac ...

  3. 基于samba实现win7与linux之间共享文件_阳仔_新浪博客

    基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.

  4. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客

    Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客 Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf     (2009-07- ...

  5. Linux命令大全【转载】_追逐梦想的顾咏丰_新浪博客

    1.显示日期的指令: date 2.显示日历的指令:cal 3.简单好用的计算器:bc 怎么10/100会变成0呢?这是因为bc预设仅输出整数,如果要输出小数点下位数,那么就必须要执行 scale=n ...

  6. 程序员之路:Linux目录处理命令_彭世瑜_新浪博客

    1.建立目录make directories mkdir -p [目录名] -p 递归创建 2.切换目录change directory cd [目录] 简化操作 cd ~ 进入当前用户的家目录 cd ...

  7. Linux学习2_Sinno_Song_新浪博客

    Linux中全部都是文件./代表根目录.-代表/home/username. .代表当前目录. 切换用户使用su.操作手册man,查询全部的手册使用man ls.查询man 的手册使用 man man ...

  8. linux基础操作_吃鱼的小脸猫_新浪博客

    一.系统的目录结构(文件系统) Linux是多用户(而权限的问题是针对于多用户的) Windows是单用户 系统的目录结构: 1. /bin : 可执行程序(命令) 2. /boot : 内核,与系统 ...

  9. Linux下IP的配置_F_hawk189_新浪博客

    在 Linux 系统中,TCP/IP 网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作.在RedHat linux刚安装好后可以通过图形化界面来配置,以下介绍通过命令行配置网络 需要 ...

最新文章

  1. tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器...
  2. 奇妙的曲线--希尔伯特曲线
  3. 前端学习(955):移动端特效导读
  4. 生产者消费者案例java代码
  5. Python源码剖析(四)字符串对象
  6. 【爱加密】防止签名破解
  7. <<道 德 经>>------老子
  8. java/poi 调整Excel 列宽支持自适应中文字符宽度
  9. HandlerThread的使用场景和用法
  10. python批量.bmp文件转换为.jpg
  11. 周爱民对提升程序员自身技术能力的建议
  12. linux-redis设置密码
  13. 需要将录音转文字在线转换,应该如何完成
  14. Linux三大剑客之sed
  15. P02014026黄一洋————信息论问题回答
  16. PTA 吉老师的回归
  17. 计算机系统原理题,计算机系统的组成及工作原理试题及答案.doc
  18. 使用Hutool处理RSA等非对称加密
  19. 随着新时代的5G来临,中国半导体行业落后,中国看到了以AI芯片取代美国的机会
  20. html5如何快速选择工具,PS快速选择工具怎么使用?快捷键是什么?

热门文章

  1. Python编程基础10:列表
  2. VB讲课笔记09:过程
  3. pythonweb搭建教程_基于Centos搭建Python Web 环境搭建教程
  4. 【英语学习】【English L06】U05 Appointments L6 The experience of booking or canceling
  5. 【英语学习】【Daily English】U11 Work L03 He is a had guy to work for
  6. 个人知识整理(javascript篇初识)
  7. JAVA项目中找不到tomcat_Tomcat启动过程中找不到JAVA_HOME解决方法
  8. python爬取小说项目概述_Python实战项目网络爬虫 之 爬取小说吧小说正文
  9. python自训练神经网络_tensorflow学习笔记之简单的神经网络训练和测试
  10. Android:浏览器跳转