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汇编应该很简单,37个寄存器,53个指令助记符;就这么点。。。
  ARM指令集:6种类型(53种主要助记符):
    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    

 
原文地址:https://www.cnblogs.com/mathzzz/p/2596686.html