一些常用的汇编代码

记录一下一些汇编代码的英文名以及作用,感觉夹在英文方面理解记忆一些,汇编主要和寄存器打交道,这里有必要认识一些arm中的一些寄存器
arm中的通用寄存器(Register)
R0-R12 : 主要的通用的寄存器, 主要用于数据操作 以及地址计算
R13 :SP 主堆栈指针寄存器,指向堆栈的顶部
R14 :LR 链接寄存器, 存储子程序的调用的返回地址
R15 :PC 程序计数器 , 指向当前正在指向的地址

arm 中的系统寄存器(System Register)
系统寄存器提供对处理器状态和控制功能的访问。这些寄存器通常不直接用于应用程序代码,而是用于操作系统或异常处理程序:
cpsr(current program state register): 当前程序状态寄存器, 包含了处理器的状态位,如条件标志(N, Z, C, V)和控制位(如中断禁用位和当前处理器模式位)
spsr(save program state register): 在异常模式下, 保存之前的程序的状态寄存器的值
arm v7的状态寄存器
除了这些基本的寄存器之外,还有一些特定于ARM版本或特定模式的寄存器,如:
扩展的堆栈指针和链接寄存器:在ARMv8及以后的版本中,有额外的堆栈指针和链接寄存器用于支持更高效的异常处理和上下文切换。
FPSCR (Floating Point Status and Control Register) :如果处理器支持浮点运算,这个寄存器用于控制和反映浮点操作的状态。

1. mrc(move to register from coprocessor)

mrc 用于将将协处理器的值移动到通用寄存器之中

mrc p#, op1, Rd, CRn, CRm, op2

其中 :
p# :协处理器编号
op1,op2:操作码
Rd:目的寄存器
CRn, CRm:协处理器寄存器

2. mcr(move to coprecessor form register)

这里是将arm中的通用寄存器的值 写入到协处理器之中

mcr p#, op1, Rd, CRn, CRm, op2

其中 :
p# :协处理器编号
op1,op2:操作码
Rd:目的寄存器
CRn, CRm:协处理器寄存器

3. mrs(move register to system register)

在arm中mrs主要是用于将通用寄存器的值写入到系统特殊寄存器之中(状态寄存器cpsr, spsr)

mrs r0, cpsr

4. msr(move system register to register)

将系统寄存器的值写入到通用寄存器之中

msr cpsr, r0 

5. bic(bite clear)

将寄存器某些的位进行清零操作, 实际执行的是 与非 操作, 将目的寄存器的位与另外一个操作数进行取反后再进行与操作

bic Rd Rn , Operand2

Rd : 目的寄存器,存放结果
Rn : 源寄存器, 提供第一操作数
Operand2: 提供第二操作数,通常是另外一个寄存器的值

6. ldr(load register)

主要用于加载从内存中加载指定数据到寄存器

ldr Rd, [address]

其中:
Rd : 目的寄存器, 用于存储从内存中加载的数据
address:数据来源的内存地址

7. moves

主要用于将一个值 移动到目的寄存中, 并且更新相应的cpsr的条件位, 如零标志(Z)、负标志(N)、溢出标志(V)和进位标志(C)

moves Rd, Operand

其中:
Rd: 目的寄存器
Operand:可以是操作数, 也就是另外一个寄存器的值

假设我们有以下指令:

moves R0, R1

这条指令会将R1寄存器的内容移动到R0寄存器,并根据R1的内容更新状态标志。例如,如果R1为0,则零标志(Z)会被设置为1;如果R1的内容为负数,则负标志(N)会被设置为1。

8. str(store)

将寄存器的值存储到内存位置

str Rd , [Rn #offset] 

其中
Rd : 你想要存储的寄存器
Rn: 基地址寄存器,存储目标内存的起始地址
#offset: 是一个可选的偏移量,用于指定从基址开始的偏移量(以字节为单位)

比如

str r0, [r1, #4]

r0寄存器的值放到 r1寄存的值 + 4 字节内存的位置

9. movn(move negative)

将立即数按位取反,并写入到寄存器中

MOVN <Wd|Xd>, #<imm>, <shift>

其中 :
<Wd|Xd> 指的是目标寄存器。Wd 是 32 位寄存器,Xd 是 64 位寄存器。
#< imm > 是立即数,指你要存入寄存器的常量值的按位取反值。
< shift > 是一个可选的位移量,用于将立即数左移(通常是 0, 16, 32 或 48 位)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值