ARM汇编语言的基本语法

一.汇编语言的基本语法

/************************汇编指令的基本结构*****************************/
标号
操作码  操作数1,操作数2,...... ;代码注释
/***********************代码行结束****************************************/
      在ARM处理器汇编指令中,标号是可选项。在汇编语言中标号是让汇编器计算程序转移的地址。如果程序中有标号,则标号必须顶格写。

1.立即数操作

      一般而言,立即数必须以"#"开头,而第一个操作数将作为当前指令执行结果的存储空间。

/*****************ARM汇编指令的立即数操作*************************/ 
MOV   R0 ,  #0x10  ;将立即数0x10送入寄存器R0
MOV   R1 ,  #'A'  ;将字符A作为立即数送入寄存器R1
/****************代码行结束******************************************/
       

2.常量

     用户可以在汇编指令中通过使用"EQU"来定义常量。

/************* ARM汇编指令EQU操作 ***********************/
;定义常量NVIC_IRQ_SETNO=0xE000E100
NVIC_IRQ_SETNO     EQU  0xE000E100 ;代码必须顶格写

LDR R0, = NVIC_IRQ_SETNO ;在一个立即数前面加"=",表示将一地址写入寄存器R0中
MOV R1, #NVIC_IRQ_SETNO ;将立即数传送到R1寄存器
STR R1, [R0] ;*R0=R1
/****************** 代码行结束 ******************************/

由于ARM采用的是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令来完成。注意它们与MOV的区别。

LDR指令是和x86系列处理器所采用的CISC架构芯片区别最大的地方.在x86系列处理器中并有LDR这种指令,因为x86中的MOV指令可以讲数据从内存移动到寄存器中。

3.DCI使用

       在某些条件下,ARM编译器可能会出现不认识某些特殊指令助记符的情况。这种情况下,需要用户查出指令所对应的二进制机器码,然后使用DCI指令对该指令进行编译。
       例如:通过查询,BKPT可用于软中断,主要用于汇编代码的调试,器机器码是0xBE00.如果编译器在编译的过程中无法识别BPKT指令,则可以使用下面的语句代替

/********************实现手动编译ARM汇编指令******************************/
DCI       0xBE00
/*******************代码行结束****************************************/

4.DCB,DCD的使用

         DCB指令用来定义遗传字节常数,字节常熟可以使用字符串的形式来定义。DCD指令用来定义一串32为的整数。通常这两条指令被使用在汇编代码中书协表格.
/*********************ARM汇编指令DCB/DCD********************************/
LDR     R3,  =MY_NUMBER
LDR     R4, [R3]


LDR     R0, =HELLO_TEXT
BL       PrintText     ;跳转到PrintText,打印寄存器R0中的字符


MY_NUMBER    ;定义标号MY_NUMBER
DCD          0x11223344

HELLO_TEXT
DCB        "Hello\n"
/*********************代码行结束**************************************/


5.汇编指令中的后缀

指令后缀 操作说明
运算操作符-S 执行操作运算符后,同时根据运算的结果更新寄存器APSR中的标志位,例如:
ADDS   R0,    R1;将R0与R1中的数值相加,并更新寄存器APSR中的标志位
EQ,NE,LT,GT等 条件判断执行语句。
EQ=Equal,NE = Not Equal
LT=Less Than
GT = Great Than 



你可能感兴趣的:(STM32学习)