蓝牙wifi单芯片乐鑫科技代理公司RISC-V汇编器功能,汇编器将汇编语句翻译成二进制格式的指令,把汇编语言文件( *.s或*asm)转变成二进制目标文件( *.o或 *.obi)。GNU RISC-V 汇编器 gas 定义了汇编命令,声明符号属性、数据格式和对齐方式等。
表 5.3 列出了 gas 中说明符号作用范围属性的常用汇编命令,定义符号在程序文件中的作用范围。
表 5.3gas 符号属性命令
类 型 符号 解 释
符号属性 .global <name> 声明“name”是全局符号,作用范围是工程中的所有文件
符号属性 .local <name> 声明“name”是局部符号,作用范围是当前文件
符号属性 . ref <name> 引用“name”外部符号,作用范围是工程中的所有文件
符号属性 .weak <name> 如果工程中“name”不存在,则创建该符号
符号属性 .type<name>,description 定义符号“name”的类型
在表 5.3中,符号名称“name”的类型“description”有两种:函数符号(funtion)和程序对象符号(object)。蓝牙wifi单芯片乐鑫科技代理公司汇编语言支持 5 种类型描述语法,以便兼容其他汇编程序5种类型描述语法如下:
.type <name>,# function
.type <name>,# object
.type <name>,@function
.type <name>,@object
.type <name>,function
.type <name>,%object
.type <name>,"function"
.type <name>,"object"
.type <name> STT FUNCTION
.type <name> STT OBJECT
在 gas汇编语言中可以定义不同的段(.section)。链接时把每一个段映射到理器存储空间的特定地址区间。蓝牙wifi单芯片乐鑫科技代理公司通常将存放指令、变量或其他数据的不同段定义为不同的存储属性,分别映射到只读、可读/写等不同的存储区域。表 5.4 列出了g和gas 中常用的段。
表5.4 gas 段属性命令
类 型 符 号 解 释
段属性 .section name 将该命令下的内容汇编到“name”段
段属性 .text 指令段,程序代码空间
段属性 .data 数据段,可读/写数据空间
段属性 .rodata.bss 只读数据段,只读数据空间
段属性 .bbs 全局变量段,全局数据空间
如表 5.5 所列,蓝牙wifi单芯片乐鑫科技代理公司gas 汇编语言定义了分配存储空间时的两个对齐格式命令“.align n”和“.balign n”。
表5.5 gas存储对齐命令
类 型 符 号 解 释
对 齐 . align n 将当前地址上移(地址增加)到以 2-n字节对齐的位置
对 齐 . balign n 将当前地址上移(地址增加)到以 n字节对齐的位置
gas 汇编语言有两类分配存储空间的命令:
1、“.zero n”,不确定数据类型,分配n字节连续的储存空间,并初始化为0;
2、“.Xbyte expr”,分配宽度“Xbyte”类型的数据空间,并写人初始值“expr”。
表 5.6 列出了 gas 汇编语言中常用分配数据空间的汇编命令。
类型 符号 解释
分配空间 .zero n 从当前地址处开始分配 n个字节空间,并且所有字节的初始值是
分配空间 .byte expr.[,expr.],... 从当前地址处开始,为符号后的每一个数分配1字节空间,并将初始值置为 expr.
分配空间 .2byte expr.[,expr.],... 从当前地址处开始,为符号后的每一个数分配2 字节空间,并将初始值置为 expr.。地址无需对齐
分配空间 .4byte expr.[,expr.],... 从当前地址开始,为符号后的每一个数分配 4 字节空间,并将初始值置为expr.。地址无需对齐
分配空间 .8byte expr.[,expr.],... 从当前地址开始,为符号后的每一个数分配8 字节空间,并将初始值置为expr.。地址无需对齐
分配空间 .half expr.[,expr.],... 从当前地址开始,为符号后的每一个数分配半字空间,并将初始值置为 expr.。地址必须以半字对齐
分配空间 .word expr.[,expr.],... 从当前地址开始,为符号后的每一个数分配 1字空间,并将初始值
分配空间 .dword expr.[,expr.],... 置为 expr.。地址必须以字对齐从当前地址开始,为符号后的每一个数分配双字空间,并将初始
分配空间 .float expr.[,expr.],... 值置为 expr.。地址必须以双字对齐从当前地址开始,为符号后的每一个数分配 1字空间,并将初始值
分配空间 .double expr.[,expr.],... 置为 expr.。地址必须以字对齐从当前地址开始,为符号后的每一个数分配双字空间,并将初始
分配空间 .string“mystring” 值置为 expr.。地址必须以双字对齐从当前地址开始,为引号中的每一个字符分配 1字节空间,并将初始值置为字符。存放“mystring”字符串。字节的个数取决于字符串的长度