arm 汇编语法
area abc123, code, readonly ; entry code32 start mov r1, #5 mov r2, #2 add r0, r1, r2 end
装了个ADS 1.2; 新手不会弄,用起来超不习惯;
很要命,没关键字语法高亮!上面代码编译通过,除了mov, add 这些指令能马上分辨出来,谁能想到area这个是干什么的?
如果我把abc123改成asm 其他新人是否会误以为asm是关键字了?
要命的是,前三行和最后一行的“end”必须以制表符开头,makefile的那个制表符就很不爽了,又碰到一个这样的语法规定;
程序员在学习一样东西的时候,总是要把相当一部分的时间耗费在熟悉那古怪的难以琢磨的语法身上!!!
-------------- 等俺 那天练就一身绝学,统一所有编程语言语法,任何程序员只需要学习一种通用语法,便可到处编写;
ARM指令集:6种类型(53种主要助记符):
1、数据处理指令(22种主要助记符)
2、跳转指令(4种主要助记符)
3、Load/Store指令(16种主要助记符)
4、程序状态寄存器指令(2种主要助记符)
5、协处理器指令(5种主要助记符)
6、软件中断指令(2种主要助记符)
1、数据处理指令(22种主要助记符)
2、跳转指令(4种主要助记符)
3、Load/Store指令(16种主要助记符)
4、程序状态寄存器指令(2种主要助记符)
5、协处理器指令(5种主要助记符)
6、软件中断指令(2种主要助记符)
在 ARM 6(和以后)的 32 位模式下可获得的寄存器有: User26 SVC26 IRQ26 FIQ26 User SVC IRQ ABT UND FIQ R0 ----- R0 ----- R0 ----- R0 -- -- R0 ----- R0 ----- R0 ----- R0 ----- R0 ----- R1 R1 ----- R1 ----- R1 ----- R1 -- -- R1 ----- R1 ----- R1 ----- R1 ----- R1 ----- R2 R2 ----- R2 ----- R2 ----- R2 -- -- R2 ----- R2 ----- R2 ----- R2 ----- R2 ----- R2 R3 ----- R3 ----- R3 ----- R3 -- -- R3 ----- R3 ----- R3 ----- R3 ----- R3 ----- R3 R4 ----- R4 ----- R4 ----- R4 -- -- R4 ----- R4 ----- R4 ----- R4 ----- R4 ----- R4 R5 ----- R5 ----- R5 ----- R5 -- -- R5 ----- R5 ----- R5 ----- R5 ----- R5 ----- R5 R6 ----- R6 ----- R6 ----- R6 -- -- R6 ----- R6 ----- R6 ----- R6 ----- R6 ----- R6 R7 ----- R7 ----- R7 ----- R7 -- -- R7 ----- R7 ----- R7 ----- R7 ----- R7 ----- R7 R8 ----- R8 ----- R8 R8_fiq R8 ----- R8 ----- R8 ----- R8 ----- R8 R8_fiq R9 ----- R9 ----- R9 R9_fiq R9 ----- R9 ----- R9 ----- R9 ----- R9 R9_fiq R10 ---- R10 ---- R10 R10_fiq R10 ---- R10 ---- R10 ---- R10 ---- R10 R10_fiq R11 ---- R11 ---- R11 R11_fiq R11 ---- R11 ---- R11 ---- R11 ---- R11 R11_fiq R12 ---- R12 ---- R12 R12_fiq R12 ---- R12 ---- R12 ---- R12 ---- R12 R12_fiq R13 R13_svc R13_irq R13_fiq R13 R13_svc R13_irq R13_abt R13_und R13_fiq R14 R14_svc R14_irq R14_fiq R14 R14_svc R14_irq R14_abt R14_und R14_fiq --------- R15 (PC / PSR) --------- --------------------- R15 (PC) --------------------- ----------------------- CPSR ----------------------- SPSR_svc SPSR_irq SPSR_abt SPSR_und SPSR_fiq
ADC 带进位的加法 - ADD 加法 - AND 逻辑与 - ASL 算术左移 这是一个选项,不是指令 ASR 算术右移 这是一个选项,不是指令 B 分支 - BIC 位清除 - BL 带连接的分支 - BX 分支到 Thumb 代码 StrongARM SA1110 ? CDP 协处理器数据操作 - CMN 比较取负的值 - CMP 比较值 - EOR 异或两个值 - LDC 装载内存到协处理器 - LDM 装载多个寄存器 - LDR 装载寄存器 - LDRB 装载字节到寄存器 - LDRH 装载半字到寄存器 StrongARM LDRSB 装载有符号字节到寄存器 StrongARM LDRSH 装载有符号半字到寄存器 StrongARM LSL 逻辑左移 这是一个选项,不是指令 LSR 逻辑右移 这是一个选项,不是指令 MCR 协处理器寄存器传送 - MLA 带累加的乘法 - MOV 传送值/寄存器到一个寄存器 - MRC 协处理器寄存器传送 - MRS 传送状态标志到一个寄存器 ARM 6 MSR 传送一个寄存器的内容到状态标志 ARM 6 MUL 乘法 - MVN 传送取负的(值) - ORR 逻辑或 - ROR 循环右移 这是一个选项,不是指令 RRX 带扩展的循环右移 这是一个选项,不是指令 RSB 反向减法 - RSC 带借位的反向减法 - SBC 带借位的减法 - SMLAL 带累加的有符号长(64 位)乘法 StrongARM SMULL 有符号长(64 位)乘法 StrongARM STC 协处理器数据传送 - STM 存储多个寄存器 - STR 存储一个寄存器 - STRB 存储一个字节(从一个寄存器) - STRH 存储一个半字(从一个寄存器) StrongARM STRSB 存储一个有符号字节(从一个寄存器) StrongARM STRSH 存储一个有符号半字(从一个寄存器) StrongARM SUB 减法 - SWI 导致一个软件中断 - SWP 交换寄存器与内存 ARM 3 TEQ 测试等价(概念上的 EOR) - TST 测试并屏蔽(概念上的 AND) - UMLAL 带累加的无符号长(64 位)乘法 StrongARM UMULL 无符号长(64 位)乘法 StrongARM