记录自已学习之ARM汇编语言ldr和str

本文详细介绍了ARM汇编语言中的ldr和str指令。ldr指令用于从内存中加载数据到寄存器,如`ldr R0, [R1, #8]`将R1加上8后的地址处的字数据加载到R0。而str指令则用于将寄存器数据存储到内存,如`ldr R0, [R1], #8`不仅将R1的内容存入R0,还更新R1的值为自身加8。" 112395499,10541543,Linux命令教程:权限不足生成dump文件与基础操作,"['Linux命令', '文件权限', '目录操作', '系统管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近自已在学习裸机,因为需要设计一点的汇编语言,所以也写点来记录。


首先讲的是LDR的指令
LDR指令的格式: 
LDR{条件}  目的寄存器, <存储器地址>
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。

我个人学到的就是两个指令:

(1)ldr R0, [R1, #8]   将地址R1 + 8的字数据读入以R0存储器中


(2)ldr R0, [R1], #8 将R1的数据读入到R0,并将R1 + 8的值存入R1





第二个指令就是STR指令

### ARM64 汇编中的 LDR STR 指令详解 #### 基本概念 在ARM64架构下,`LDR`(Load Register)`STR`(Store Register)用于执行内存访问操作。这些指令允许处理器读取或写入指定位置的数据。 #### 指令格式 - **加载指令 (`LDR`)** - `ldr Xd, <存储器地址>`:从给定的绝对地址加载数据到寄存器Xd中[^1]。 - `ldr Xd, #immediate`:将立即数装载至寄存器Xd内[^5]。 - `ldr Xd, literal`:从PC相对偏移处获取常量并载入目标寄存器[^2]。 - `ldr Xd, Rs`:利用Rs内的值作为地址来取得相应位置的内容填充到Xd里。 - **存储指令 (`STR`)** - `str Xd, <存储器地址>`:把寄存器Xd里的数值保存到具体的位置上去。 - `str Xd, #immediate`:按照固定的偏移量设定好要存放的地方再实施储存动作[^4]。 - `str Xd, Xs`:依据另一个寄存器Xs所指示的目标区域完成记录工作。 #### 地址计算方式 对于带有偏移量的操作形式如`ldr xd,[Xs,#offset]`来说,则表示先求得基底加权后的实际物理定位点,随后据此提取所需字节序列送入目的容器之中。 #### 实际应用案例 下面给出一段简单的例子展示如何运用上述两条命令: ```assembly .section .data value: .quad 0xdeadbeefcafebabe // 定义一个8字节整型变量 .text .global _start _start: ldr x0, =value // 将'value'标签代表的地址加载进x0 ldr x1, [x0] // 把位于x0指向地方的数据搬移到x1里面去 add x2, x0, #8 // 让指针前进八个单位长度到达下一个可能存在的元素之前 str x1, [x2] // 将原先持有的那份拷贝放置于新坐标的所在之处 ``` 这段代码首先定义了一个名为"value"的数据项,在程序入口处通过伪操作符`=`,实现了对这个静态分配对象引用关系的确立过程;接着借助间接寻址机制完成了对其内部信息的一次完整复制活动,并最终实现了一份副本向另一片未被占用空间转移的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值