Qwen3-Embedding-4B实操案例:API文档语义搜索替代传统TOC导航

核心内容摘要

突破三维格式壁垒:从STL网格到STEP实体的全流程解析
5分钟搞定!Qwen2.5-VL视觉模型开箱即用体验

避开C++时间处理坑:chrono库的duration_cast正确使用姿势

ARM汇编语言语法小解文章目录ARM汇编语言语法小解

基本架构特点

基本语法结构

指令格式

程序组成

寄存器

通用寄存器32位

特殊寄存器

指令分类与语法

数据处理指令

加载/存储指令

分支指令

移位操作

寻址方式

立即数寻址

寄存器寻址

寄存器间接寻址

基址加偏移寻址

前变址/后变址寻址

条件执行

条件码后缀

条件执行示例

伪指令和汇编器指示符

常用伪指令

汇编器指示符

完整示例程序

ARM与Thumb模式

十、

注意事项

常用编程模式ARM汇编语言是一种低级编程语言用于直接控制ARM处理器的操作。

以下是ARM汇编语言的详细语法介绍

基本架构特点RISC架构精简指令集大多数指令在一个时钟周期内执行加载/存储架构只有加载/存储指令可以访问内存运算指令只操作寄存器统一字长大多数指令为32位ARM模式或16位Thumb模式条件执行几乎所有指令都可以条件执行

基本语法结构

指令格式[label:] mnemonic [operands] [; comment]示例start: ; 标签 MOV R0, #10 ; 将立即数10加载到R0 ADD R1, R0, #5 ; R1 R0

程序组成指令处理器执行的操作伪指令汇编器指令不生成机器码汇编器指示符控制汇编过程的指令

寄存器

通用寄存器32位R0-R12通用目的寄存器R13 (SP)堆栈指针R14 (LR)链接寄存器保存返回地址R15 (PC)程序计数器

特殊寄存器CPSR当前程序状态寄存器N负标志、Z零标志、C进位标志、V溢出标志模式位、中断禁止位等

指令分类与语法

数据处理指令OPcode{S}{cond} Rd, Rn, Operand2S可选更新条件标志cond条件码可选Rd目标寄存器Rn第一操作数寄存器Operand2第二操作数寄存器/立即数/移位寄存器常见指令MOV R0, #0x3F ; 传送立即数 ADD R1, R2, R3 ; 加法R1 R2 R3 SUB R4, R5, #10 ; 减法R4 R5 - 10 AND R0, R1, R2 ; 按位与 ORR R3, R4, #0xFF ; 按位或 EOR R5, R6, R7 ; 按位异或 CMP R0, R1 ; 比较设置标志位

加载/存储指令LDR Rd, [Rn] ; 从内存加载到寄存器 STR Rd, [Rn] ; 从寄存器存储到内存 LDR Rd, [Rn, #offset] ; 带偏移量的加载 LDMIA Rn!, {reglist} ; 多寄存器加载 STMIA Rn!, {reglist} ; 多寄存器存储

分支指令B label ; 无条件跳转 BL label ; 带链接的跳转用于函数调用 BX Rn ; 跳转到寄存器指定的地址 BEQ label ; 相等时跳转Z1 BNE label ; 不相等时跳转Z

移位操作LSL R0, R1, #2 ; 逻辑左移2位 LSR R2, R3, #4 ; 逻辑右移4位 ASR R4, R5, #1 ; 算术右移1位 ROR R6, R7, #8 ; 循环右移8位

寻址方式

立即数寻址MOV R0, #0xFF ; 立即数0xFF ADD R1, R2, #100 ; 立即数

寄存器寻址ADD R0, R1, R2 ; R0 R1 R2 MOV R3, R4 ; R3 R

寄存器间接寻址LDR R0, [R1] ; R0 memory[R1] STR R2, [R3] ; memory[R3] R

基址加偏移寻址LDR R0, [R1, #4] ; R0 memory[R1 4] LDR R0, [R1, R2] ; R0 memory[R1 R2] LDR R0, [R1, R2, LSL #2] ; R0 memory[R1 (R2

]

前变址/后变址寻址LDR R0, [R1, #4]! ; 前变址R1 R1 4, 然后加载 LDR R0, [R1], #4 ; 后变址先加载然后R1 R1 4

条件执行

条件码后缀后缀含义条件标志EQ相等Z1NE不相等Z0CS/HS进位/无符号C1CC/LO无进位/无符号C0MI负N1PL正/零N0VS溢出V1VC无溢出V0HI无符号C1且Z0LS无符号C0或Z1GE有符号NVLT有符号N!VGT有符号Z0且NVLE有符号Z1或N!VAL总是执行任何

条件执行示例CMP R0, R1 ; 比较R0和R1 ADDGT R2, R3, #1 ; 如果R0R1则执行 MOVLE R2, #0 ; 如果R0R1则执行

伪指令和汇编器指示符

常用伪指令ADR R0, label ; 加载标签地址小范围 LDR R0, label ; 加载标签地址大范围 LDR R0, 0x12345678 ; 加载32位立即数 NOP ; 空操作

汇编器指示符.global _start ; 声明全局符号 .section .text ; 代码段开始 .align 2 ; 按4字节对齐 .arm ; 使用ARM指令集 .thumb ; 使用Thumb指令集 .word 0x12345678 ; 定义32位数据 .byte 0x12, 0x34 ; 定义字节数据 .ascii Hello ; 定义ASCII字符串 .asciz World ; 定义以null结尾的字符串 .equ MAX, 100 ; 定义常量

完整示例程序/* ARM汇编示例计算

..10 */ .global _start /* 全局入口点 */ .section .text /* 代码段 */ _start: MOV R0, #0 /* 总和清零 */ MOV R1, #1 /* 计数器从1开始 */ MOV R2, #10 /* 最大值 */ loop: CMP R1, R2 /* 比较计数器和最大值 */ BGT end /* 如果R1R2跳转到结束 */ ADD R0, R0, R1 /* 累加R0 R0 R1 */ ADD R1, R1, #1 /* 计数器加1 */ B loop /* 继续循环 */ end: /* 此时R0中存储着结果55 */ /* 退出程序Linux系统调用 */ MOV R7, #1 /* 退出系统调用号 */ MOV R0, #0 /* 返回码0 */ SWI 0 /* 软中断 */ .section .data /* 数据段 */ result: .word 0 /* 存储结果 */

ARM与Thumb模式ARM模式32位指令完整的指令集所有指令都可以条件执行Thumb模式16位指令也有32位Thumb-2指令代码密度更高有限的指令集只有分支指令可以条件执行模式切换ADR R0, thumb_code1 BX R0 ; 切换到Thumb模式 .thumb thumb_code: MOV R0, #10 ; Thumb指令

十、

注意事项立即数限制ARM立即数必须是8位位图循环移位得到的对齐要求ARM指令需要4字节对齐数据访问也有对齐要求PC的特殊性读取PC时返回当前指令地址8ARM模式寄存器使用约定函数调用时通常使用R0-R3传递参数R0保存返回值

常用编程模式函数调用/* 调用函数 */ BL function_name /* ... */ /* 函数定义 */ function_name: PUSH {R4-R11, LR} /* 保存寄存器和返回地址 */ /* 函数体 */ POP {R4-R11, PC} /* 恢复寄存器并返回 */堆栈操作PUSH {R0-R3, LR} /* 压栈多个寄存器 */ POP {R0-R3, PC} /* 出栈并返回 */ARM汇编语言通过其丰富的指令集和灵活的条件执行机制为底层系统编程提供了强大的控制能力。

随着ARM架构的发展如ARMv8-A的AArch64语法有所变化但基本概念保持了一致性。

免费观看已满十八岁电视剧直播指南2025最新-免费观看已满十八岁电视剧直播指南2025最新应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123