X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
编程基础
[原创] 《RISC-V开放架构设计之道》-汇编语言+RV32I
rtyu789
2024-10-5 22:48
楼主
# 汇编语言 由于想要先了解程序形成的过程,所以先阅读了第三章来了解程序是如何被生成的 ![1_编译流程](/data/attachment/forum/202410/05/224619co9f5d55xmnnf9i1.jpg.thumb.jpg?rand=6127.104146001326) 这是普通C语言的的编译流程,本章主要介绍了后哦三个步骤,就是汇编器、链接器和加载器 对于RISV-V的汇编器,不仅生成了处理器可以理解的目标代码,还支持了一些对编译器开发者和汇编语言程序员有用的操作,被称为**伪指令** 比如在RISV-V的汇编过程中,将函数返回的汇编指令是re,实际上汇编器会将其替换为jalr 伪指令通过依赖寄存器x0,可以实现许多常用操作,比如转跳返回和等于零时分支,极大的简化了RISC-V指令集 ![2_RISCV寄存器助记符](/data/attachment/forum/202410/05/224620fhmcmmjz7exm0izv.jpg.thumb.jpg?rand=3768.22640057104) 接下来文章介绍了RISC-V汇编语言的hello world程序,继续介绍了**汇编器指示符** ![3_汇编器指示符](/data/attachment/forum/202410/05/224621tv4zkeaxii00edf7.jpg.thumb.jpg?rand=2478.112894406612) 链接器可以将新的目标代码和已有机器语言凭借起来,如果输入的是**位置无关代码**(PIC),那么链接器的工作量会有所降低,意味着无论代码位于何处,所有分支指令和数据引用均正确 编译的时候还会涉及到交叉编译和链接器松弛的问题 链接后的程序是保存在计算机中的可执行文件,在运行程序时,加载器会将代码加载带内存汇总,并转到到代码的起始地址 # RV32I: RISC-V基础整数指令集 RV32I是RISC-V中最基础的指令集,全部的指令示意图如下图所示,可以看到十分的简洁 ![4_RISC-V指令示意图](/data/attachment/forum/202410/05/224621uxoj1kccxjks6vaa.jpg.thumb.jpg?rand=4539.931021849279) ![5_RISC-V指令格式](/data/attachment/forum/202410/05/224622eejsk85a6gg42zst.jpg.thumb.jpg?rand=5700.328176133514) RV32I有六种基本你的指令格式 1. R型:用于寄存器操作 2. I型:用于短立即数和取数操作 3. S型:用于存数操作 4. B型:用于条件分支 5. U型:用于长立即数 6. J型:用于无条件转跳 ![6_RISC-V寄存器](/data/attachment/forum/202410/05/224623gijakaucc2jlcjzl.jpg.thumb.jpg?rand=8591.471007751843) 上图展示了RV32寄存器和由于RISC-V应用程序二进制接口ABI定义的寄存器名称,有31个寄存器和恒为0的x0寄存器 ARM-32只有16个寄存器,x86-32甚至只有8个 1. RV32I的整数计算 1. 算术指令:add, sub 2. 逻辑指令:add, or, xor 3. 移位指令:sll, srl, sra 4. 功能:从源寄存器中读取两个32位的值,并将32为的结果写入目的寄存器 2. RV32I的取数和存数操作 1. 取数和存数:lw,sw 2. 有符号和无符号的字节和半字节取数:lb,lbu,lh,lhu 3. 字节和半字的存数指令:sb,sh 3. RV32I的条件分支 1. 比较结果是否相等:beq 2. 比较结果是否不相等:bne 3. 比较结果是否大于或等于:bge 4. 比较结果是否小于:blt 5. 无符号版本:bgeu,bltu 4. RV32I的无条件转跳 1. 转跳并链接:jal 5. 其他指令 1. ecall:向运行时环境发出请求,如系统调用 2. ebreak:将控制转移到调试环境 3. fence:对外部可见的访存请求,例如设备IO和内存访问等进行串行化 ![7_插入排序对比性能](/data/attachment/forum/202410/05/224623nlqcqhh4lu4reilr.jpg.thumb.jpg?rand=2696.919511474143) 最后将RV32I和ARM-32、MIPS-32和x86-32使用插入排序的C语言实践,对比生成的指令数和字节数 总体RV32I的性能还是较优的 # 参考资料 [链接器松弛优化原理介绍](https://blog.csdn.net/weixin_42031299/article/details/132860439) [重新理解Linux交叉编译及编译流程](https://blog.csdn.net/STCNXPARM/article/details/123452517)
点赞
回复评论 (1)
沙发
通途科技
好好学习,天天向上,加油,自己,加油每一个人!!!
点赞
2024-11-9 20:19
最新活动
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
随便看看
单片机软件或平台
数据采集基础知识
自制VB上位机串口监控简单程序(内详)
交流变直流还得升高电压
关于sources.cmn文件的问题和两个汇编指令。
现在编程玩具刚开始流行,
周工尝试开办的夏令营活动
STM32F769I-DISCO评测【11】--移植LWIP
谁做过DSP上变频 求指导 最好是用AD9857
请问大家,这个是什么传感器
求购BLE Dongle蓝牙抓包
做H题的进来
深入了解FRAM和TI新MSP430FR57xx MCU(二)
ProgrammingWinCE3rd,字体为何显示比系统用的字体要大的多?!
[FS-IR02 + D1CS-D54] - 5:跟MCU联动(D1CS-D54)
求28335连接12864的并口显示程序
固件库的问题,请大侠帮帮忙,
g2 收到
高频脉宽调制技术在逆变器中的应用
库文件位置每次都要改路径啊?
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复