网站建设基本流程费用嘉兴网站开发公司电话

当前位置: 首页 > news >正文

网站建设基本流程费用,嘉兴网站开发公司电话,wordpress升级php7,用php做网站视频一#xff1a;ARM汇编寻址

  1. 立即数寻址 (Immediate Addressing) 指令中直接给出一个常数值#xff08;立即数#xff09;#xff0c;并对其进行操作。 MOV R0, #5 ; 将立即数5载入寄存器R02. 直接寻址 (Direct Addressing) 指令中给出的地址直接指定了内存中的一…一ARM汇编寻址
  2. 立即数寻址 (Immediate Addressing) 指令中直接给出一个常数值立即数并对其进行操作。 MOV R0, #5 ; 将立即数5载入寄存器R0
  3. 直接寻址 (Direct Addressing) 指令中给出的地址直接指定了内存中的一个位置通常在数据段中。 LDR R0, 0x1000 ; 将地址0x1000的值加载到R0寄存器
  4. 间接寻址 (Indirect Addressing) 使用寄存器中的地址来访问内存中的数据。 LDR R0, [R1] ; 将R1寄存器中存储的地址所指向的值载入R0
  5. 基址寻址 (Base Addressing) 通过一个基址寄存器加上一个偏移量来访问内存。 LDR R0, [R1, #4] ; 从R1寄存器所指向的地址加上4的偏移量处加载数据到R0
  6. 偏移寻址 (Offset Addressing) 在基址的基础上通过增加一个偏移值来访问数据。 STR R0, [R1, R2] ; 将R0的值存储到地址为R1 R2的内存位置
  7. 自增和自减寻址 (Pre-Indexed Post-Indexed Addressing) 通过预增或后增来访问数据。 预索引 (Pre-Indexed): 在访问内存前先修改基址寄存器的值。 LDR R0, [R1, #4]! ; 加载R1地址加4处的值到R0并将R1更新为R1 4 后索引 (Post-Indexed): 在访问后修改基址寄存器的值。 LDR R0, [R1], #4 ; 首先加载R1地址处的值到R0然后将R1增加4
  8. 结构体寻址 (Struct Addressing) 通常在处理结构体时利用基址和字段偏移量进行访问。 LDR R0, [R1, #OFFSET] ; 读取R1寄存器指向的位置加上字段偏移量存入R0
  9. 无条件跳转和条件跳转 无条件跳转 B 和带条件的跳转指令 BEQ、BNE 等这些也是寻址模式的体现因为它们影响程序计数器 (PC) 的值。 B label ; 跳转到 label BEQ label ; 如果 ZF (零标志位) 为 1跳转到 label 示例汇编程序 以下是一个简单的 ARM 汇编程序示例展示了不同寻址方式的使用 .section .data value: .word 10.section .text .global _start_start:LDR R0, value ; 使用直接寻址加载 value 地址LDR R1, [R0] ; 使用间接寻址加载 value 的值 (10)ADD R1, R1, #1 ; R1 R1 1结果 R1 11STR R1, [R0] ; 使用间接寻址将 R1 的值存回 memory locationMOV R7, #1 ; 系统调用号 (exit)SWI 0 ; 触发系统调用退出程序 在 ARM 汇编语言中寄存器移位寻址、加载/存储寻址方式以及栈寻址是非常重要的寻址模式。
  10. 寄存器移位寻址 (Register Shift Addressing) 寄存器移位寻址允许在操作数中对寄存器的值进行位移操作。这种模式通常用于算术和逻辑操作中可以通过左移、右移等方式改变寄存器中的值。 示例 MOV R0, #1 ; 将立即数1加载到R0 LSL R1, R0, #2 ; 将R0左移2位结果存储在R1中 (R1 4) LSR R2, R1, #1 ; 将R1右移1位结果存储在R2中 (R2 2) LSL (Logical Shift Left): 左移操作低位补零。LSR (Logical Shift Right): 右移操作最高位补零。
  11. 加载/存储寻址方式 (Load/Store Addressing) 在 ARM 中加载LDR和存储STR指令用于将数据从内存加载到寄存器或将寄存器中的数据存储到内存。常见的加载/存储寻址方式包括 直接寻址: 直接指定地址。基址寻址: 使用基址寄存器和偏移量。间接寻址: 使用寄存器中的地址。 示例 .data value: .word 10.text .global _start_start:LDR R0, value ; 直接寻址加载 value 的地址LDR R1, [R0] ; 从 R0 指向的地址加载值 (10) 到 R1ADD R1, R1, #1 ; R1 R1 1 (R1 11)STR R1, [R0] ; 将 R1 的值存储回 value 的地址
  12. 栈寻址 (Stack Addressing) 栈是用于存储局部变量、函数参数和返回地址的特殊内存区域。ARM 使用向下增长的栈通常通过 PUSH 和 POP 指令进行操作。栈寻址通常涉及到 SP栈指针寄存器。 示例 .text .global _start_start:MOV R0, #5 ; 将5放入R0PUSH {R0} ; 将R0的值压入栈中POP {R1} ; 从栈中弹出值到R1 (R1 5)MOV R7, #1 ; 系统调用号 (exit)SWI 0 ; 触发系统调用退出程序
  13. 栈的使用 栈通常用于函数调用和返回。以下是一个简单的示例演示如何在函数中使用栈 .text .global mainmain:PUSH {LR} ; 保存返回地址MOV R0, #10 ; 将10放入R0PUSH {R0} ; 将R0的值压入栈中BL subroutine ; 调用子程序POP {R0} ; 从栈弹出值到R0POP {PC} ; 从栈弹出返回地址返回到调用者; 程序结束subroutine:POP {R1} ; 从栈弹出值到R1ADD R1, R1, #1 ; R1 R1 1PUSH {R1} ; 将结果压入栈中BX LR ; 返回到调用者 总结 寄存器移位寻址 允许对寄存器的值进行位移操作适用于算术和逻辑运算。加载/存储寻址方式 是 ARM 汇编中最常用的方式用于在寄存器和内存之间传输数据。栈寻址 是通过栈实现局部变量和函数调用的管理使用 PUSH 和 POP 指令进行操作。 二汇编指令详细介绍 在 ARM 汇编语言中指令集非常丰富涵盖了数据处理、控制流、内存访问等多个方面。以下是一些常见的 ARM 汇编指令的详细介绍包括它们的功能、语法和示例。
  14. 数据处理指令 1.1 MOV (Move) 将一个值移动到寄存器中。 语法: MOV destination, source 示例: MOV R0, #5 ; 将立即数5加载到R0寄存器 1.2 ADD (Addition) 将两个寄存器的值相加并将结果存储在目标寄存器中。 语法: ADD destination, operand1, operand2 示例: ADD R1, R0, R2 ; R1 R0 R2 1.3 SUB (Subtraction) 从一个寄存器中减去另一个寄存器的值。 语法: SUB destination, operand1, operand2 示例: SUB R3, R1, R0 ; R3 R1 - R0 1.4 MUL (Multiply) 将两个寄存器的值相乘。 语法: MUL destination, operand1, operand2 示例: MUL R4, R0, R1 ; R4 R0 * R1
  15. 逻辑指令 2.1 AND (Bitwise AND) 对两个寄存器的值进行按位与操作。 语法: AND destination, operand1, operand2 示例: AND R5, R0, R1 ; R5 R0 R1 2.2 ORR (Bitwise OR) 对两个寄存器的值进行按位或操作。 语法: ORR destination, operand1, operand2 示例: ORR R6, R0, R1 ; R6 R0 | R1 2.3 EOR (Bitwise Exclusive OR) 对两个寄存器的值进行按位异或操作。 语法: EOR destination, operand1, operand2 示例: EOR R7, R0, R1 ; R7 R0 ^ R1
  16. 移位指令 3.1 LSL (Logical Shift Left) 将寄存器的值左移指定的位数。 语法: LSL destination, source, #shift 示例: LSL R8, R0, #2 ; R8 R0 2 3.2 LSR (Logical Shift Right) 将寄存器的值右移指定的位数。 语法: LSR destination, source, #shift 示例: LSR R9, R1, #1 ; R9 R1 1
  17. 加载和存储指令 4.1 LDR (Load Register) 从内存加载数据到寄存器。 语法: LDR destination, [address] 示例: LDR R0, [R1] ; 从R1指向的地址加载数据到R0 4.2 STR (Store Register) 将寄存器中的数据存储到内存。 语法: STR source, [address] 示例: STR R0, [R1] ; 将R0的值存储到R1指向的地址
  18. 控制流指令 5.1 B (Branch) 无条件跳转到指定标签。 语法: B label 示例: B loop ; 跳转到 loop 标签 5.2 BL (Branch with Link) 跳转到指定标签并保存返回地址。 语法: BL label 示例: BL function ; 跳转到 function 标签并保存返回地址 5.3 BX (Branch and Exchange) 跳转到指定寄存器的地址并根据地址的最低位决定是 ARM 还是 Thumb 模式。 语法: BX register 示例: BX R0 ; 跳转到R0寄存器指向的地址
  19. 栈操作指令 6.1 PUSH 将寄存器的值压入栈中。 语法: PUSH {registers} 示例: PUSH {R0, R1} ; 将R0和R1的值压入栈中 6.2 POP 从栈中弹出值到寄存器。 语法: POP {registers} 示例: POP {R0, R1} ; 从栈中弹出值到R0和R1
  20. 条件执行指令 ARM 汇编指令可以通过条件后缀来实现条件执行。例如BEQ 表示“如果相等则跳转”。 7.1 BEQ (Branch if Equal) 如果零标志位ZF为1则跳转。 语法: BEQ label 示例: BEQ equal_label ; 如果相等则跳转到 equal_label 7.2 BNE (Branch if Not Equal) 如果零标志位ZF为0则跳转。 语法: BNE label 示例: BNE not_equal_label ; 如果不相等则跳转到 not_equal_label 三补充数据处理指令 在 ARM 汇编语言中数据处理指令是用于对寄存器中的数据进行算术运算、逻辑运算、位操作等的指令。除了之前提到的基本指令ARM 还提供了许多其他强大的数据处理指令。
  21. 数据处理指令详细介绍 1.1 ADC (Add with Carry) 将两个寄存器的值相加并加上进位标志C。 语法: ADC destination, operand1, operand2 示例: ADC R0, R1, R2 ; R0 R1 R2 C 1.2 SBC (Subtract with Carry) 从一个寄存器中减去另一个寄存器的值并减去进位标志C。 语法: SBC destination, operand1, operand2 示例: SBC R0, R1, R2 ; R0 R1 - R2 - C 1.3 ROR (Rotate Right) 将寄存器的值右旋转指定的位数。 语法: ROR destination, source, #shift 示例: ROR R0, R1, #2 ; R0 R1 右旋转2位 1.4 ROL (Rotate Left) 将寄存器的值左旋转指定的位数在 ARM 中通常使用 LSL 来实现。 语法: ROL destination, source, #shift 示例: MOV R0, R1 ; 将R1复制到R0 LSL R0, R0, #1 ; 左移1位 ORR R0, R0, R1, LSR #31 ; 将R1的最高位移到最低位 1.5 CMP (Compare) 比较两个寄存器的值设置状态标志但不存储结果。 语法: CMP operand1, operand2 示例: CMP R0, R1 ; 比较R0和R1的值 1.6 CMN (Compare Negative) 比较两个寄存器的值并设置状态标志类似于 CMP但相当于 R0 R1。 语法: CMN operand1, operand2 示例: CMN R0, R1 ; 计算R0 R1并设置状态标志 1.7 TST (Test) 对两个寄存器进行按位与操作设置状态标志但不存储结果。 语法: TST operand1, operand2 示例: TST R0, R1 ; R0 和 R1 进行按位与操作 1.8 TEQ (Test Equivalence) 对两个寄存器进行按位异或操作设置状态标志但不存储结果。 语法: TEQ operand1, operand2 示例: TEQ R0, R1 ; R0 和 R1 进行按位异或操作 1.9 BIC (Bit Clear) 将一个寄存器的值与另一个寄存器进行按位与清除指定的位。 语法: BIC destination, operand1, operand2 示例: BIC R0, R1, #0xFF ; 清除R1中最低的8位结果存入R0 1.10 MVN (Move Not) 将一个寄存器的值取反并存储到目标寄存器中。 语法: MVN destination, source 示例: MVN R0, R1 ; R0 ~R1
  22. 其他重要指令 2.1 SEL (Select) 根据条件选择一个寄存器的值。虽然在 ARM 指令集中并不常见但在某些 ARM 扩展中存在。 语法: SEL destination, condition, operand1, operand2 示例: SEL R0, R1, R2, R3 ; 根据条件选择 R1 或 R2 存入 R0 2.2 CLZ (Count Leading Zeros) 计算一个寄存器中前导零的数量。 语法: CLZ destination, source CLZ R0, R1 ; R0 R1 中前导零的数量