2026/1/1 2:55:55
网站建设
项目流程
北京做网站的网络公司,wordpress %link,东莞网络问政平台,电商网站在线支付怎么做ARM 汇编指令#xff1a;STR
1. 核心定义
STR 是 Store Register 的缩写#xff0c;意思是 将寄存器中的值存储#xff08;写入#xff09;到内存。它是 ARM 汇编中最基本、最常用的内存写入指令。
与它对应的是 LDR 指令#xff0c;后者是从内存加载数据到寄存器。
2…ARM 汇编指令STR1. 核心定义STR是Store Register的缩写意思是将寄存器中的值存储写入到内存。它是 ARM 汇编中最基本、最常用的内存写入指令。与它对应的是LDR指令后者是从内存加载数据到寄存器。2. 基本语法STR{size} Rt, [Rn, operand2]{size}:可选的后缀指定操作的数据大小。默认为 32 位字。B- 字节 8位如STRBH- 半字 16位如STRH无后缀 - 字 32位如STR在 ARMv8 (AArch64) 中还可以使用W(32位) 或X(64位) 寄存器来隐含大小。Rt:源寄存器其值将被存储到内存。[Rn, operand2]: 内存地址表达式。Rn: 基址寄存器存放内存地址的基值。operand2: 地址偏移量可以是立即数或另一个寄存器有时还可以带移位。3. 寻址模式关键部分寻址模式决定了如何计算最终的内存地址。a) 偏移模式地址是基址寄存器加上一个偏移量。原基址寄存器的值不变。STR R1, [R2, #12] ; 内存地址 R2 12将 R1 的值存入此地址。R2 本身的值不变。b) 前变址模式先计算新地址基址偏移然后使用这个新地址进行存储。基址寄存器的值会被更新为这个新地址。STR R1, [R2, #12]! ; 注意感叹号 ! ; 1. 计算新地址: R2_new R2_old 12 ; 2. 将 R1 的值存储到 [R2_new] 指向的内存 ; 3. 将 R2 寄存器的值更新为 R2_newc) 后变址模式先使用原基址寄存器的值作为地址进行存储然后再更新基址寄存器加上偏移量。STR R1, [R2], #12 ; 偏移量写在括号外 ; 1. 将 R1 的值存储到 [R2_old] 指向的内存 ; 2. 更新 R2: R2_new R2_old 12这种模式非常适合在存储后移动指针例如遍历数组。d) 寄存器偏移偏移量可以来自另一个寄存器并可选择移位操作。STR R1, [R2, R3] ; 地址 R2 R3 STR R1, [R2, R3, LSL #2] ; 地址 R2 (R3 * 4)4. 数据大小示例 (ARMv7/AArch32)STR R0, [R1] ; 将 R0 中的 32 位字Word存储到 R1 指向的地址 STRB R0, [R1] ; 只将 R0 的最低 8 位字节Byte存储到内存 STRH R0, [R1] ; 只将 R0 的最低 16 位半字Halfword存储到内存5. AArch64 (ARMv8 64位) 中的变化在 64 位架构下语法和寄存器名称有更新通用寄存器是X0-X30(64位) 或W0-W30(32位)。STR的数据大小通常由寄存器宽度隐含但也可用后缀指定。偏移量范围通常更大。STR X0, [X1, #8] ; 将 64 位的 X0 存储到地址 X18 STR W0, [X1, #4] ; 将 32 位的 W0 存储到地址 X14 STRB W0, [X1] ; 将 W0 的低 8 位存储到地址 X16. 一个简单完整的示例假设我们要将数组array的第一个元素在内存中设置为 100。.data array: .word 0, 0, 0, 0 ; 定义一个包含4个字的数组初始为0 .text .global main main: // 假设我们要将 array[0] 赋值为 100 LDR R0, array ; R0 获得数组的首地址加载地址 MOV R1, #100 ; R1 100这是我们要存储的值 STR R1, [R0] ; 关键指令将 R1 的值100存储到 R0 指向的内存地址 // 使用后变址模式存储 200 到 array[1] MOV R1, #200 STR R1, [R0], #4 ; 存储到 [R0]然后 R0 R0 4指向下一个字 // 此时 R0 指向 array[1] 的地址 BX LR ; 返回7. 要点总结特性说明目的将寄存器数据写入内存对应指令LDR从内存读关键语法STR Rt, [Rn, #offset]寻址模式偏移基址不变、前变址先算地址并更新基址、后变址先存后更新基址数据大小STR字32位STRH半字16位STRB字节8位应用场景变量赋值、保存寄存器到栈函数调用、向内存填充数据、数据结构操作等理解STR及其寻址模式是掌握 ARM 汇编内存操作的基础。它与LDR指令一起构成了寄存器和内存之间数据交换的核心手段。