×
单片机 > 单片机程序设计 > 详情

arm 汇编语法

发布时间:2021-01-22 发布时间:
|

    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   


关键字:arm  汇编语法 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析