type
status
date
slug
summary
tags
category
icon
password
一、ARM汇编规范
1、书写规范
- 所有的符号都必须在一行书写,在后面不用添加高级语言所用的分号。
- ARM汇编器对标识符的大小写敏感,书写符号以及指令时字母大小写一定要一致。
- 一条ARM指令,伪指令。寄存器名可以全部写为大写字母,也可以全部为小写字母, 但是不能大小写混合编写使用。
- 注释使用(分号),注释内容由(分号)开始到执行结束。
例如:[符号] <指令|条件|S> <操作数>[;注释]
2、符号
符号可以代表地址、变量、数字变量,当符号代表地址时又叫标号,符号就是变量的变量名、数字常量的名称、标号,符号的命名规则如下:
- 符号由大小写字母、数字以及下划线组成;
- 除局部标号以数字开头外,其它的符号不能以数字开头;
- 符号区分大小写,且所有字符都是有意义的;
- 符号在其作用域范围必须是唯一的;
- 符号不能与系统内部或系统预定义的符号同名;
- 符号不要与指令助记符、伪指令同名。
3、常量
常量的分类:数字常数、字符常量、布尔常量
(1)数字常数有三种表示方式: 十进制数,如:12、5、876、0 十六进制数如:0x4387、0xFF0、0x1 n 进制数用n-XXX 表示,其中n 为2~9,XXX 为具体的数,如:2-010111、8-4363156
(2)字符常量 字符常量由一对单引号及中间字符串表示,标准C 语言中的转义符也可使用。如果需要包含双引号或$,必须使用"" “”和$$代替。 如:Hello SETS “Hello World!” Errorl SETS “The parameter ““VFH””error$$2”
(3)布尔常量 布尔常量的逻辑真为{TRUE},逻辑假为{FALSE}。 如: testno SETS {FALSE}
4、ARM指令的格式
ARM是三地址指令格式,指令的基本格式为:
其中< >号内为必须的,{ }里面的项是可选的
5、跳转指令
6.存储器与寄存器交互数据指令
存储器(主存,内存) 寄存器中放的数据:可以是字符串,可以是数,也可以是一个地址,它可以放各种类型的数据 存储地址单元:地址(如0x00004000)与地址中存在的值
A、LDR指令 (Load from memory into register)
LDR指令的格式:
LDR{条件} 目的寄存器 <存储器地址>
作用:将存储器地址所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。 ←
LDR指令的寻址方式比较灵活,实例如下:
B、STR指令 (Store from a register into memory)
STR指令的格式为:
STR{条件} 源寄存器,<存储器地址>
STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。→
C、LDM指令 (Load from memory into register / Load much)
LDM指令的格式为:
LDM {cond} <模式> Rn{!},reglist{^}
LDM是将内存中堆栈内的数据,批量的赋值给寄存器,即是出栈操作 →
D、STM指令 (Store from a register into memory / Store much)
STM指令的格式为:
STM {cond} <模式> Rn{!},reglist{^}
STM:将一个寄存器列表的数据存储到指定的存储器 ←
E、PUSH和POP
F、SWP
SWP将寄存器与存储器之间的数据进行交换
SWP指令的格式为:
SWP Rd,Rm,[Rn]
Rd 为数据从存储器加载到的寄存器;Rm的数据用于存储到存储器中,若Rm与Rn相同,则为寄存器与存储器内容进行交换;Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同。
7、数据传送指令
MOV:将立即数或寄存器的数据传送到目标寄存器 ←
8、数据算术运算指令
← ADD,SUB,MUL,DIV (加、减、乘、除) 有符号,无符号运算;带进位运算
9、数据算术运算指令
与:AND 或:ORR 异或:EOR
移位:实质是乘,除,类似于小数点移位,但相反。小数点左移,数变小;右移变大。 但逻辑移位,左移变大,右移变小,且按2的倍数进行,因为是2进制。
LSL:逻辑左移← LSR:逻辑右移←
10、比较指令
CMP:比较
- 作者:404False
- 链接:https://blog.404nofoundx.top//article/8b7d76d2-a567-4296-a429-4e15d041579b
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。