藍牙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”字符串。字節的個數取決于字符串的長度