前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RISC-V 汇编语言程序设计(4)汇编语言格式及ABI

RISC-V 汇编语言程序设计(4)汇编语言格式及ABI

原创
作者头像
IC知识库
修改2021-08-03 18:15:07
1.4K0
修改2021-08-03 18:15:07
举报
文章被收录于专栏:IC知识库平台

1.汇编语言格式简介

以asm_run_seg.S为例:

代码语言:javascript
复制
.equ BYTE_DELAY, 0x00100000
.equ GPIO_ADDR,  0xf0000000
.globl _start
_start:
LI   t2,  BYTE_DELAY;       # set counter
     ADDI t3,  x0, 0;       # t3 = 0
     LI  t0,  GPIO_ADDR;    # set gpio base_address 
......

LOOP:  ADDI t3, t3, 1;      # t3 = t3 + 1
       BNE t3, t2, LOOP;    # if(x6 != x7) goto loop
       ADDI t3,  x0, 0;     # t3 = 0

汇编的指示符(directive)的格式使用“.” + 关键词

.globl(注意不是.global)用来声明全局标签,可从其它的文件访问,比如上面代码中.globl定义了_start,那么如果工程中其他的文件需要跳转到_start地址,可以直接使用

.equ定义符号常量,符号常量定义后可以在程序中使用,比如BYTE_DELAY 被定义为0x00100000,之后需要用0x00100000都可以用BYTE_DELAY 代替,赋予常量意义,容易理解,且便于批量修改。格式为.equ GPIO_ADDR,0xf0000000

标签,比如_start是地址,标注某段程序的位置,为程序中跳转及分支语句提供的跳转入口。标号一般用大写字母表示,或下划线跟小写字母或单词。在使用标号时后面跟冒号”:”,比如LOOP: ,_start:

一般汇编指令格式:指令 + 空格 + 寄存器 + “,”+寄存器 + “,” + 寄存器(或立即数),比如 ADDI t3,x0,0;。也有部分汇编指令只接一个寄存器和立即数,格式为指令 + 空格 + 寄存器 + “,”+ 立即数,比如 LI a3,0x08;

汇编指令以分号”;”结束,常量定义以回车换行结束,没有分号”;”。比如.equ GPIO_ADDR, 0xf0000000和ADDI t3,x0,0;

#后跟的内容是注释语句,对该指令或该段程序的说明或解释,编译器在编译时忽略该部分内容。比如# set gpio base_address

2.ABI

ABI(Application Binary Interface),应用程序到二进制的接口,一般是用来在应用程序与操作系统,应用程序与调用库(lib),及应用程序部件之间的底层接口,如图1所示。

备注:其它ABI的完整内容,请搜索引擎搜索“IC知识库”查看。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 备注:其它ABI的完整内容,请搜索引擎搜索“IC知识库”查看。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档