查看: 2816|回复: 0
收起左侧

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

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-27 09:25
  • 签到天数: 57 天

    [LV.5]

    发表于 2020-6-12 13:02:45 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 小飞飞 于 2020-8-21 02:46 编辑

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

    本文为RISC-V嵌入式开发准备篇1:编译过程简介。本文的目的是对编译过程进行简单的科普与回顾,为后续详细介绍“RISC-V GCC工具链”和“RISC-V汇编语言程序设计”打下基础。


    注:本文力求通俗易懂,主要面向初学者,对编译过程有所了解的读者可以忽略此文。



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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(1)


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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(2)
    1.5.2 定义宏
    宏(macro)是汇编语言中具有一组独立功能的汇编语句被组织在一起,然后可以以宏调用的方式进行调用。示例如下:

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(3)

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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(4)

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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(5)

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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(6)

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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(7)

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

    国内芯片技术交流-RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(8)

    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嵌入式开发入门篇2:RISC-V汇编语言程序设计(中)risc-v单片机中文社区(9)
    本篇完,感谢关注:RISC-V单片机中文网






    上一篇:RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(上)
    下一篇:RISC-V嵌入式开发入门篇2:RISC-V汇编语言程序设计(下)
    RISCV作者优文
    相信自已,未来是自已创造的。
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-6 08:05 , Processed in 1.192600 second(s), 49 queries .

    快速回复 返回顶部 返回列表