16|RISC-V指令精讲(一):算术指令实现与调试
LMOS
你好,我是 LMOS。
通过前面的学习,我们已经了解了在 C 语言编译器的“视角”下,C 语言的各种表达式是如何转换成各种机器汇编指令的。从这节课开始,我会带你进一步深入学习各种汇编指令的细节。
只要你耐心跟我学完这节课,对 RISC-V 的各种指令,你就能了如指掌了。这里我们将从 RV32I 的算术指令开始,先学习加减指令(add、sub),接着了解一下数值比较指令(slt)。这些指令都有两个版本,一个是立即数版本,一个是寄存器的版本。话不多说,我们开始吧。
加减指令
上小学时我们都学过四则运算,最基础的是加减法,即一个数加上或者减去一个数,对应到 CPU 中就是一条加法指令和一条减法指令。
一个 CPU 要执行基本的数据处理计算,加减指令是少不了的,否则基础的数学计算和内存寻址操作都完成不了,用这样的 CPU 做出来的计算机将毫无用处。
不过想让 CPU 实现加减法,我们需要用到它能“理解”的语言格式,这样才能顺畅交流。所以,在研究指令之前,我们先来看看 RISC-V 指令的格式。
RISC-V 指令的格式
RISC-V 机器指令是一种三操作数指令,其对应的汇编语句格式如下:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
RISC-V指令集中的算术指令实现与调试是本文的重点。文章深入讲解了加减指令的实现方式及调试过程,通过详细的示例代码和调试过程,读者可以快速掌握RISC-V指令集中的算术指令的实现方式和编码结构。此外,文章还介绍了比较指令,包括有无符号立即数版本的slti、sltiu指令,并通过示例代码验证了这些指令的功能。整体而言,本文通过深入讲解RISC-V指令集中的算术指令实现与调试,为读者提供了深入了解RISC-V架构的机会。文章还提到了下节课将继续学习逻辑指令和移位指令,为读者展示了本文的延伸内容和学习方向。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》,新⼈⾸单¥68
《计算机基础实战课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 范廷东用手机看不清文章中的图片
编辑回复: 截图细节比较多,建议pc端学习和跟练~
2023-08-27归属地:陕西 - James Deng想问一下,浮点及不同数据类型转换,也是有对应的指令吧
作者回复: 嗯嗯
2022-09-15归属地:湖北 - LockedX0x00000033解析为0000 0000 0011 0011 由操作码011 0011和功能码都是0推出指令add(寄存器加法) 再由第5课查表得知0表示寄存是zero,所以指令是add zero,zero,zero 这个就是所谓的占位指令啦
作者回复: 是的 你很厉害
2022-09-08归属地:湖北 - peter请教老师几个问题: Q1:立即数最小只能是-2048,如果要减去更大的数,怎么办? 同理,如果要加上比2048大的数,怎么办? Q2:功能位有什么用?addi指令的功能位是3位,都是0,好像没有区别。 Q3:jr ra,这里的 ra 表示什么?
作者回复: Q1用寄存器
2022-09-01归属地:湖北 - 苏流郁宓操作符add,……,a1?中间的00不懂指向那个寄存器的啊
作者回复: 00???
2022-08-31归属地:湖北 - 肖水平汇编语言中.globl是什么意思?为什么addi_ins没有加它?
作者回复: 导出符号
2022-08-31归属地:湖北
收起评论