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

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

  • RISC-V嵌入式开发准备篇1:编译过程简介
  • RISC-V嵌入式开发准备篇2:嵌入式开发的特点介绍
  • RISC-V嵌入式开发入门篇1:RISC-V GCC工具链的介绍
  • RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(上)
  • RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)
  • RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(下)
  • RISC-V嵌入式开发上手篇:基于HBird-E-SDK平台的软件开发与运行
  • RISC-V嵌入式开发实践篇:运行开源蜂鸟E200 MCU更多示例程序
  • RISC-V嵌入式开发新奇篇:基于Windows Eclipse IDE的软件开发与运行
  • RISC-V嵌入式开发升华篇:基于开源蜂鸟E200 MCU移植RTOS

在本号之前发表的文章《编译过程简介》中介绍了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相关的更多设计技巧和经验分享,注意:由于干货太多,请自备茶水。

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

  1. RISC-V嵌入式开发准备篇1:编译过程简介

    原文出处:https://mp.weixin.qq.com/s/-syKN0DibKGGPCllaeNqMg 随着国内第一本RISC-V中文书籍<手把手教你设计CPU--RISC-V处理器篇&g ...

  2. RISC-V嵌入式开发准备篇2:嵌入式开发的特点介绍

    原文出处:https://mp.weixin.qq.com/s/ljYZwMj3JaPN29dTAXA3bQ 随着国内第一本RISC-V中文书籍<手把手教你设计CPU--RISC-V处理器篇&g ...

  3. cesium 页面截图_Cesium开发入门篇 | 02Cesium开发环境搭建及第一个示例

    01 开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍 ...

  4. 嵌入式开发入门之经典 ARM开发板

    嵌入式开发入门之经典 开始进入嵌入式世界,真是一头雾水,不知道如何入手!也不知道该如何学习,学习什么,最近从网上转载这篇文章,对我启发很大,对于初始进入嵌入式的人们很有帮组,好多嵌入式大侠都说这是入门 ...

  5. Hololens开发入门篇-郑洪智-专题视频课程

    Hololens开发入门篇-572人已学习 课程介绍         本课程使用Hololens模拟器,基于Unity2017.2及Visual Studio 2017开发 课程收益     学会Ho ...

  6. 海思软件开发入门篇 (一)

    标题 海思软件开发入门篇 (一)   (第一次写博客,有错别字与写的不好的地方敬请谅解.)   加过很多群,也逛过很多论坛,很多人在问,第一次接触海思不知道从而入手,的确,现在一个SDK动不动上G,还 ...

  7. 【微信小程序】开发入门篇(二)

    前言 ❤️ 所谓信仰,可能就是在人们一无所剩的时候仅有的那种东西 ❤️ [微信小程序]开发入门篇(二) 一.小程序的宿主环境 (1)宿主环境简介 1.1 什么是宿主环境 1.2 小程序的宿主环境 (2 ...

  8. 【微信小程序】开发入门篇(一)

    前言 ❤️ 你可能认为一个人无法改变世界,但我想让你知道,这个世界也无法改变像我这样的人 ❤️ [微信小程序]开发入门篇(一) 一.小程序简介 (1)小程序与普通网页开发的区别 二.第一个小程序 (1 ...

  9. STM51嵌入式开发入门软件安装-Keil、stc、驱动

    STM51嵌入式开发入门软件安装-Keil.stc.驱动 STM51嵌入式开发入门软件安装-Keil.stc.驱动 1 Keil安装 1.1 百度进入官网 1.2 选择C51,点击后需要填的信息随便填 ...

最新文章

  1. 6.微信小程序的如何使用全局属性
  2. (转)修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
  3. mxnet中的SoftmaxCrossEntropyLoss损失函数
  4. Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
  5. RxSwift 小记 Error Handling Operators(catchError,retry)
  6. 根据Word表格自动生成SQL数据库脚本的VBScript代码
  7. (批量)备份github仓库到本地
  8. ios 下拉放大 上拉缩小_为啥鞠婧祎发量这么多?截图放大十倍她的“发缝”,网友:真密集...
  9. 工业智能相机与基于PC的机器视觉的区别比较
  10. mysql8连接java_JAVA连接MYSQL8.0问题
  11. 光头老熊做易赛是这样做教下家的
  12. python程序员专用壁纸_Python程序员必用的电脑桌面
  13. windows编译opencv+opencv_contrib 以及解决cmake下载boostdesc_bgm等文件失败问题
  14. 计算机网络需要解决什么问题,计算机网络故障的解决措施
  15. python蓝牙控制手机打电话_树莓派 python bluetooth,用pybluez控制蓝牙
  16. 16 医疗挂号系统_【预约下单】
  17. thinkphp内核家教平台网站源码带手机站
  18. 蓝桥杯刷题冲刺 | 倒计时14天
  19. 实战技法 - 短线操盘 (11)
  20. DNS测试bat脚本分析

热门文章

  1. 笔记本计算机无法启动怎么解决,电脑启动不了怎么办,详细教您笔记本电脑启动不了怎么办...
  2. 使用debootstrap手动安装debian系统
  3. 如何选择骨传导耳机、2022不伤耳骨传导耳机推荐
  4. 个人项目总结-瑞吉外卖/传智健康/黑马点评
  5. PTA 7-5 素数排位(10 分)
  6. 为什么半导体FAB生产线需要EAP系统?
  7. if语句的三种形式及嵌套
  8. 工信部:加快 IPv6 部署,阿里云、腾讯云、UCloud等完成CDN的IPv6改造
  9. shell脚本启动停止程序
  10. 蓝牙体重体脂秤解决方案