0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

新手 RISC-V 编程应该注意哪几点内容

strongerHuang 来源:CSDN 作者:CSDN 2021-06-01 09:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原文:

https://blog.stephenmarz.com/2021/05/12/tips-to-writing-assembly/

当用户使用 C、C++ 或任何其他高级语言时,编译器决定了程序的艺术。然而这一次,我们将自行面对 CPU,新手实现面向指令集编程的艺术,本文使用RISC-V 为例来向大家展示,来如何使用编写语言设计程序逻辑,并最终将程序逻辑转换为汇编语言的程序。

1

用合适的语言设计逻辑对于初学者来说,这是最难的一步,因为现在学生们常用的高级语言中,往往使用更抽象的工具进行逻辑设计,许多学生想直接编写完整的功能模块。但是对于汇编语言来说,这是一种注定要失败的方法。相反,为了把逻辑和语言分开,我们必须用我们理解的语言来设计程序逻辑。

如果一个学生不懂 C 或一些“低级”语言,那么我建议他们用伪码写。因为用太高级的语言如 Java 其实是面向虚拟机编程的,这会增加程序逻辑到汇编语言的转换难度,而使用太低级的语言会使程序逻辑设计变得困难。因此,我推荐 C 或 C++,在将代码进行转换的时候,最好将有对应的代友横向放在一起,一些编辑可以把它们并排放在一起,这是很有帮助的。

说实话这部分虽然看似平平无奇,但却让我颇感到意外,因为 C 语言和汇编的对照完全可以通过 gcc 的 -o -g 参数以及 objdump 实现。

fcdddd28-c238-11eb-9e57-12bb97331649.png

在译者的理念中,汇编语言是专门用于填补空白,只有当其它语言不能胜任的时候才会考虑用汇编语言上场工作,不过从这篇博文中透露出的信息来看,国外在教学过程中对于汇编语言的运用范围也是不设限的,而在译者印象中能用汇编语言实现任何功能的程序员,在国内只有求伯君,严援朝等廖廖数人而已,由此可见我们在 IT 基础教育领域要做的工作还很多。

2

小步快跑,不要试图一口吃个胖子很多汇编语言的初学者试着从头到尾写完整的程序,而没有在中间进行过任何测试关键,但是我建议在完成部分逻辑时就立刻进行测试。这样做其实很简单,比如完成了一个 for 循环,等等一小部分功能就要开始测试。

可以将 C 或 C++ 程序与汇编程序连接起来。通过在 C++ 中原型化组装函数的名称实现这一点。按照一般的做法通常会在 C 函数前面加上一个 “c” 来区分。我们可以调用 Show 来运行汇编语言编写的函数。

其实这部分的建议并不仅仅针对于 RISC-V 甚至不是针对汇编语言,无论是什么语言的编程,当你想到要进行单元测试的时候往往就已经晚了,随时对于一个细小的模块进行测试真的是一个好习惯。

3

了解汇编语言的功能定位这里我们必须要充分认识到没有汇编语言和有编译器解释器的高级语言真的完全不一样,不养儿不知父母恩,不写汇编不知各类语言之父有多神。在汇编语言中操作顺序都需要程序员自己去掌握。

例如,4+3*4 的运算,作何一种语言的编译器都先执行乘法,然后再加法。然而在汇编语言的编程世界中,我们必须首先选择乘法指令,然后再选择加法指令。没有为我们进行运算符号的优先级重排。

4

了解如何调用函数

在汇编语言中编写一个函数是一项非常艰苦的任务,大多数 ISA 体系结构(如ARM和RISC-V)的芯片都将附带专门的工作手册,当然这些手册中只是制定了一些基本规则,如何传递参数,如何接收返回结果,又如何构造函数栈祯等等具体的话题都值得深入讨论。

不过幸运的是 RISC-V 寄存器的 “ABI” 命名规则,有助于程序员理解它们的含义。比如:

整数参数在寄存器 A0-A7 中,浮点参数在寄存器 FA0-FA7 中

通过对堆栈指针的 sub 操作去分配函数堆栈。在调用完成后使用 add 操作进行销毁

堆栈大小必须以 8 的整数倍形式分配

所有参数和临时寄存器必须在函数调用后,被视为销毁态

在函数调用之后,已保存寄存器才能被显式保存。如果使用了任何已保存的寄存器,则必须在函数返回之前还原它们的原始值

通过 a0 寄存器做为返回值,将数据返回给调用方。

以下面这段代码为例:

.global mainmain:addi sp, sp, -8sd ra, 0(sp)la a0, test_solvecall solvemv a0, zerold ra, 0(sp)addi sp, sp, 8ret

我们可以看到先通过 addi sp,sp,-8 的语句构造函数祯,保存所有寄存器后执行相应函数逻辑,接下来将所有包括sp寄存器内的调用环境恢复,最后返回。

5

文档建议使用 C 或其他语言编写汇编语言的注释,用以下代码为例:

# used |= 1 《《 ( x[i * 9 + col] - 1) li t0, 9 mul t1, s3, t0 # t1 = i * 9 add t1, t1, s2 # t1 = i * 9 + col slli t2, t1, 2 # Scale by 4 add t2, t2, s6 # x + i * 9 + col lw t3, 0(t2) # x[i * 9 + col] addi t3, t3, -1 # x[i * 9 + col] - 1 li t4, 1 sll t4, t4, t3 # 1 《《 x[i * 9 + col] - 1 or s5, s5, t4 # used |= 。。.

原始 C 语言代码进行一个总的注释,然后将每个汇编语言片段的也使用 C 语言进行注释。尤其当涉及到运算操作顺序时,这样的方式使我们能够保证程序可以正确地执行每一步。

免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5619

    浏览量

    130421
  • 数据
    +关注

    关注

    8

    文章

    7349

    浏览量

    95021
  • 函数
    +关注

    关注

    3

    文章

    4422

    浏览量

    67848
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74380

原文标题:新手 RISC-V 编程的几点内容

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RT-Thread 邀您参与“开放・连接”2026玄铁 RISC-V 生态大会,携手共铸 RISC-V“芯”纪元

    2026年3月24日,由浦东新区人民政府科经委指导,达摩院主办,上海开放处理器产业创新中心、RISC-V工作委员会、中国开放指令(RISC-V)生态联盟联合协办的本届玄铁RISC-V生态大会,将在
    的头像 发表于 03-22 10:05 595次阅读
    RT-Thread 邀您参与“开放・连接”2026玄铁 <b class='flag-5'>RISC-V</b> 生态大会,携手共铸 <b class='flag-5'>RISC-V</b>“芯”纪元

    RISC-V不支持 Nx吗?

    RISC-V architecture! · nrwl/nx · Discussion #27915 如果能够支持 RISC-V,那就太好了。目前我无法在我的 VisionFive2 板上
    发表于 02-04 06:27

    新思科技ARC-V处理器驱动RISC-V市场无限机遇

    从 2010 年美国加州大学伯克利分校的教授与他的研究生团队耗时三个月完成 RISC-V 指令集的开发工作,到 2015 年,RISC-V 在学术界声名鹊起,再到 2025 年成为主流架构之一
    的头像 发表于 12-24 17:17 1478次阅读
    新思科技ARC-<b class='flag-5'>V</b>处理器驱动<b class='flag-5'>RISC-V</b>市场无限机遇

    喜讯|昊芯RISC-V DSP荣获“中国芯”RISC-V生态推广奖

    成果,成功斩获"RISC-V生态推广示范案例"奖项!这是对中科昊芯坚持自主创新、推动RISC-V产业化、构建开放共赢生态体系的权威认可。技术突破:RISC-V落地
    的头像 发表于 11-18 09:01 2499次阅读
    喜讯|昊芯<b class='flag-5'>RISC-V</b> DSP荣获“中国芯”<b class='flag-5'>RISC-V</b>生态推广奖

    为什么RISC-V是嵌入式应用的最佳选择

    最近RISC-V基金会在社交媒体上发文,文章说物联网和嵌入式系统正在迅速发展,需要更高的计算性能、更低的功耗和人工智能。RISC-V是为未来而建的,包括超高效的MCU到高性能应用处理器,RISC-V使开发人员能够设计以下解决方案
    的头像 发表于 11-07 10:09 1835次阅读

    RISC-V B扩展介绍及实现

    B扩展简介 RISCV B扩展指的是RISCV用于位运算加速的一个扩展指令集,目的是使用一条指令实现原本需要2-3条指令才能实现的位操作指令。具体包含内容如下: B扩展就是RISC-V一个可选
    发表于 10-21 13:01

    大湾区RISC-V生态全景展示:RISC-V生态发展论坛、开发者Workshop和生态应用专区

    继7月份上海的RISC-V中国峰会之后,中国RISC-V生态和产业发展最新动态将在10月份深圳的湾芯展上全景展示。   RISC-V,这个以开放、简约、模块化重塑处理器架构格局的开源指令集(ISA
    的头像 发表于 10-13 09:18 734次阅读
    大湾区<b class='flag-5'>RISC-V</b>生态全景展示:<b class='flag-5'>RISC-V</b>生态发展论坛、开发者Workshop和生态应用专区

    普华基础软件亮相2025 RISC-V中国峰会

    此前,7月16日至18日,第五届RISC-V中国峰会在上海盛大召开。普华基础软件副总经理兼战略研究院院长张晓先受邀参会,发表《开源小满助力RISC-V软硬协同生态发展》主题演讲,分享了开源小满
    的头像 发表于 07-28 16:51 1347次阅读
    普华基础软件亮相2025 <b class='flag-5'>RISC-V</b>中国峰会

    RISC-V 手册

    以下是关于RISC-V的详细介绍,结合其核心技术特点与当前发展现状:核心概念RISC-V(第五代精简指令集)是一种基于精简指令集(RISC)的开源指令集架构(ISA),由加州大学伯克利分校于2010
    发表于 07-28 16:27 11次下载

    2025新思科技RISC-V科技日活动圆满结束

    新思科技深度参与2025 RISC-V中国峰会并于2025年7月16日举办同期活动“新思科技RISC-V科技日”技术论坛,聚焦“从芯片到系统重构RISC-V创新”主题,议题覆盖当前最前沿的技术领域
    的头像 发表于 07-25 17:31 1604次阅读

    时擎科技亮相2025 RISC-V中国峰会,深度解析高性能RISC-V SoC技术挑战与创新

    2025年7月16-18日,第五届RISC-V中国峰会在上海张江科学会堂成功举办,作为全球RISC-V领域顶级盛会之一,本届峰会汇聚了数百家企业、研究机构及开源社区,共同探讨RISC-V生态
    的头像 发表于 07-21 17:37 1862次阅读
    时擎科技亮相2025 <b class='flag-5'>RISC-V</b>中国峰会,深度解析高性能<b class='flag-5'>RISC-V</b> SoC技术挑战与创新

    RISC-V 发展态势与红帽系统适配进展

    2025 年 7 月 18 日,在第五届(2025)RISC-V 中国峰会的软件与生态系统分论坛上,红帽软件(北京)有限公司首席软件工程师、RISC-V 国际基金会大使傅炜分享的主题是《红帽在
    发表于 07-18 10:55 4228次阅读
    <b class='flag-5'>RISC-V</b> 发展态势与红帽系统适配进展

    RISC-V 的平台思维和生态思维

    RISC-V 的魅力在于以模块化、开源、开放的指令集为底座,通过平台化技术框架降低芯片与应用开发门槛,并以协同共建的产业生态弥合碎片、加速落地。因此,高通高级副总裁 Leendert van
    发表于 07-17 14:04 4228次阅读

    RISC-V International CEO:RISC-V 应用全面开花,2031 年渗透率将达 25.7%

    7 月 16 日~19 日,第五届(2025)RISC-V 中国峰会在上海张江科学会堂拉开帷幕。峰会设置 1 场主论坛、8 大垂直领域分论坛、多场研习会及多项同期活动。在 7 月 17 日的主论坛上
    发表于 07-17 10:28 3800次阅读
    <b class='flag-5'>RISC-V</b> International CEO:<b class='flag-5'>RISC-V</b> 应用全面开花,2031 年渗透率将达 25.7%

    RISC-V和ARM有何区别?

    在微处理器架构领域,ARM与RISC-V是两个备受关注的体系。ZLG致远电子在推出ARM核心版后,又推出了基于RISC-V的MR6450核心版,这引发了人们对这两种架构差异的深入探讨。ARM
    的头像 发表于 06-24 11:38 2247次阅读
    <b class='flag-5'>RISC-V</b>和ARM有何区别?