RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)

原文出处:https://mp.weixin.qq.com/s/3RHss3vhfK004-TtM8fpeA

随着国内第一本RISC-V中文书籍《手把手教你设计CPU——RISC-V处理器篇》正式上市,越来越多的爱好者开始使用开源的蜂鸟E203 RISC-V处理核,很多初学者留言询问有关RISC-V工具链使用的问题,因此本公众号将开始陆续发表若干篇有关RISC-V软件工具链使用的文章,包括:

在本号之前发表的文章《编译过程简介》中介绍了C/C++语言如何被编译成为汇编语言,而本文将介绍如何直接使用RISC-V架构的汇编语言进行程序设计。

《RISC-V汇编语言程序设计》——分成上中下三篇,本篇是中篇。继续关注公众号可查询上下两篇的内容。

上篇:RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(上)

注:本文节选自《RISC-V架构与嵌入式开发快速入门》(即将出版)。

1.5 RISC-V汇编程序示例

1.5.1 定义标签

标签名称通常在一个冒号(:)之前,常见的标签分为文本标签和数字标签。文本标签在一个程序文件中是全局可见的,因此定义必须使用独一无二的命名,文本标签通常被作为分支或跳转指令的目标地址,示例如下:
在这里插入图片描述

数字标签为0到9之间的数字表示的标签,数字标签属于一种局部标签,需要使可以被重新定义。在被引用之时,数字标签通常需要带上一个字母“f”或者“b”的后缀,“f”表示向前,“b”表示向后,示例如下:

在这里插入图片描述

1.5.2 定义宏

宏(macro)是汇编语言中具有一组独立功能的汇编语句被组织在一起,然后可以以宏调用的方式进行调用。示例如下:

在这里插入图片描述

1.5.3 定义常数

在汇编语言中可以使用.equ伪操作定义常数,并赋予其一个别名,然后在汇编程序中直接使用其别名,示例如下:

在这里插入图片描述

1.5.4 立即数赋值

在汇编语言中可以使用RISC-V的伪指令li进行立即数的赋值。li不是真正的指令,而是一种RISC-V的伪指令,等效于若干条指令(计算得到立即数)。有关RISC-V伪指令的更多介绍请参见中文书《手把手教你设计CPU——RISC-V处理器篇》附录A.15。示例如下:

在这里插入图片描述

上述指令经过汇编之后产生的指令如下,可以看出li指令等效于若干条指令。

在这里插入图片描述

1.5.5 标签地址赋值

在汇编语言中可以使用RISC-V的伪指令la进行标签地址的赋值。la不是真正的指令,而是一种RISC-V的伪指令,等效于若干条指令(计算得到标签的地址)。有关RISC-V伪指令的更多介绍请参见中文书《手把手教你设计CPU——RISC-V处理器篇》附录A.15。示例如下:

在这里插入图片描述

上述指令经过汇编之后产生的指令如下,可以看出la指令等效于auipc和addi这两条指令。

在这里插入图片描述

1.5.6 设置浮点舍入模式

对于RISC-V浮点指令而言,可以通过一个额外的操作数来设定舍入模式(Rounding Mode),譬如fcvt.w.s指令需要舍入零(round-to-zero)则可以写为fcvt.w.s a0, fa0, rtz,如果没有指定舍入模式,则默认使用动态舍入模式(dyn)。有关RISC-V浮点指令的舍入模式,请参见中文书《手把手教你设计CPU——RISC-V处理器篇》附录A.14.4节了解更多信息。

不同舍入模式的缩写分别如下:

  • rne: 最近舍入,朝向偶数方向(round to nearest, ties to even)
  • rtz: 朝零舍入(round towards zero)
  • rdn: 向下舍入(round down)
  • rup: 向上舍入(round up)
  • rmm: 最近舍入,朝向最大幅度方向(round to nearest, ties to max magnitude)
  • dyn: 动态舍入模式(dynamic rounding mode)

1.5.7 完整实例

为便于读者更加理解汇编程序,以下是一个完整的汇编程序实例。

在这里插入图片描述

《RISC-V汇编语言程序设计》——分成上中下三篇,本篇是中篇。继续关注公众号可查询上下两篇的内容。

上篇:RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(上)

(未完待续:《RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(下)》)

更多信息

感兴趣的读者可以通过下面二维码关注公众号“硅农亚历山大”,了解Verilog、IC设计、CPU、RISC-V和人工智能AI相关的更多设计技巧和经验分享,注意:由于干货太多,请自备茶水。

在这里插入图片描述

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值