共计 1153 个字符,预计需要花费 3 分钟才能阅读完成。
在 ARM 汇编中,单数据传输指令用于从存储器中加载数据到寄存器,或将寄存器中的数据存储到存储器。在本节中,咱们将具体介绍 ARM 汇编中的单数据传输指令,并通过实例帮忙你更好地了解和把握这些指令。
- 加载数据到寄存器(LDR)
LDR 指令用于从存储器中加载数据到寄存器。根本语法如下:
LDR Rd, [Rn, #offset]
其中,Rd 是指标寄存器,Rn 是基址寄存器,offset 是偏移量(能够是负数或正数)。
示例:
LDR R0, [R1, #4] ; 从地址 (R1 + 4) 处加载一个字(32 位数据)到 R0 寄存器
在这个示例中,LDR 指令用于从存储器中加载数据到 R0 寄存器。地址由 R1 寄存器的值加上偏移量 4 计算得出。
- 存储寄存器中的数据到存储器(STR)
STR 指令用于将寄存器中的数据存储到存储器。根本语法如下:
STR Rd, [Rn, #offset]
其中,Rd 是源寄存器,Rn 是基址寄存器,offset 是偏移量(能够是负数或正数)。
示例:
STR R0, [R1, #4] ; 将 R0 寄存器中的一个字(32 位数据)存储到地址 (R1 + 4) 处
在这个示例中,STR 指令用于将 R0 寄存器中的数据存储到存储器。地址由 R1 寄存器的值加上偏移量 4 计算得出。
留神:LDR 和 STR 指令还有多种变体,例如 LDRB、STRB(用于加载 / 存储字节)、LDRH、STRH(用于加载 / 存储半字),以及反对不同寻址模式的变体。在理论编程中,你可能须要依据具体需要抉择适合的指令和寻址模式。
以下是一个简略的示例,演示如何应用 LDR 和 STR 指令实现数组元素求和:
; 假如 R1 指向一个蕴含 4 个整数的数组,R2 存储数组长度
; 目标是计算数组元素之和,并将后果存储在 R0 中
MOV R0, #0 ; 初始化求和后果为 0
MOV R3, #0 ; 初始化数组索引为 0
sum_loop: ; 求和循环开始
CMP R3, R2 ; 比拟数组索引和数组长度
BGE sum_done; 如果索引 >= 长度,跳转到 sum_done 完结求和
LDR R4, [R1, R3, LSL #2] ; 加载数组元素到 R4(假如数组元素是 32 位整数,因而每个元素占用 4 字节,相当于左移 2 位)ADD R0, R0, R4 ; 将 R4 中的值累加到 R0 中
ADD R3, R3, #1 ; 减少数组索引
B sum_loop ; 无条件跳转回 sum_loop 持续求和
sum_done: ; 求和实现,后果曾经在 R0 中
以上就是 ARM 汇编中常见的单数据传输指令。在理论编程中,你可能须要依据具体需要应用这些指令加载数据到寄存器或将寄存器中的数据存储到存储器。通过多加练习和实际,你将更加熟练地把握这些指令的应用。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g