STM32学习(一)--汇编指令总结


一、EQU:等价语句

1、一般使用格式:
符号名 EQU 表达式
作用是左边的符号名代表右边的表达式。
注意: 等价语句不会给符号名分配存储空间,符号名不能与其它符号同名,也不能被重新定义(类似宏定义)
 
2、用符号名代表常量或表达式
当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。
例如:
 
NUMBER EQU 100 ;给缓冲区的长度取一个符号名
BUFF_LEN EQU NUMBER+2
CR EQU 13 ;给“回车”符的ASCII码定义一个符号名
LF EQU 10 ;给“换行”符的ASCII码定义一个符号名
 
3、用符号名代表字符串
用一个具有一定含义的符号名定义某一个较长的字符串,在随后的程序中就用该符号名。例如:
GREETING EQU "How are you!"
在该定义之后,就可使用符号名GREETING来代表字符串"How are you!"。
 
4、用符号名关键字或指令助忆符
用一个(组)程序员自己习惯的符号名来代替汇编语言中的关键字或指令助忆符。但在此建议不要这样做,因为程序的编写者习惯,程序的其他阅读者可能会觉得很别扭。
例如:
MOVE EQU MOV ;给指令MOV取另一个符号名MOVE
COUNTER EQU CX ;给寄存器CX取一个叫“计数器”的符号名
上面的定义只是给原来的助忆符MOV和CX起了另一个别名,而原来助忆符MOV和CX仍然可以使用 ,所以,我们可编写如下语句:
MOVE AX, CX ;相当于指令:MOV AX, CX
MOV COUNTER, BX ;相当于指令:MOV CX, BX
 
5、用符号名定义存储单元的别名
可对一片存储单元定义另一个数据类型的符号名,有关叙述参见前面的操作符THIS。
 
二、AREA

AREA 命令指示汇编程序汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接程序处理。

语法:     AREA sectionname{,attr}{,attr}...

    其中:

sectionname:将要指定的段名。

           可以为段选择任何段名。但是,以一个数字开始的名称必须包含在竖杠号内,否则会产生一个缺失段名错误。例如,|1_DataArea|。 有些名称是习惯性的名称。例如,|.text| 用于表示由 C 编译程序产生的代码段,或用于以某种方式与 C 库关联的代码段。

attr:一个或多个用逗号分隔的段属性。有效的属性是:

ALIGN=expression

默认情况下,ELF 段在四字节边界上对齐。expression 可以拥有 0 到 31 的任何整数。段在 2expression 字节边界上对齐。例如,如果 expression 是 10,则段是在 1KB 边界上对齐。这与 ALIGN 命令所指定的方式并不相同。

ASSOC=section

section 指定一个关联的 ELF 段。sectionname必须包含在含有 section 的任何链接中。

CODE     

包含机器指令。READONLY 是默认值。

COMDEF   

是一个公共段定义。这是包含代码或数据的 ELF 段。其必须等同于与其它源文件中拥有相同名称的任何其它段须是同一段。拥有相同名称的同一 ELF 段在存储器的相同段中被链接程序覆盖。如果有任何段不同,则链接程序产生一个警告,并且不覆盖这些段。请参阅RealView 编译工具 2.0 版链接程序和实用程序指南 中的链接程序 一章。

COMMON

是公共数据段。不能在其中定义任何代码或数据。其由 链接程序初始化为零。拥有相同名称的所有公共段在存 储器的相同段中被链接程序覆盖。它们并不都需要具有 相同的大小。链接程序按每个名称的最大公共段的需要 分配空间。

DATA

包含数据但不含指令。READWRITE 是默认值。

NOALLOC

表示在目标系统上没有为此 AREA 分配存储器。

NOINIT

表示数据段是未初始化的或初始化为零。其只包含零初始化的空间保留命令 SPACE 或 DCB、DCD、DCDU、DCQ、DCQU、DCW 或 DCWU。可以决定在链接时 AREA 是未初始化的还是零初始化的(请参阅RealView 编译工具 2.0 版链接程序和实用程序指南 中的链接程序 一章)。

READONLY

表示不能写到此段中。这是代码区域的默认情况。

READWRITE

表示可以读和写此段。这是数据区域的默认情况

三、

SPACE和DCD的区别在于:

SPACE和DCD的功能类似,SPACE申请一片内存空间,DCD申请一个字(32bit)的内存空间。

SPACE和DCD的区别在于,SPACE申请空间但不赋初值,DCD申请一个字的空间,并赋初值。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM