<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[今天看了下RISC-V手册然后去调戏了一下编译器看看编译器所翻译出来的汇编是什么]]></title><description><![CDATA[<p dir="auto">看了RISC-V ISC（指令集架构）的由来和发展以及宗旨，不由得觉的RISC-V确实是一个可以拿来学习使用的ISC。这里也把书安利给大家。<br />
见帖:<a href="https://bbs.aw-ol.com/topic/32/%E5%AE%89%E5%88%A9%E4%B8%80%E6%9C%AC%E4%B9%A6-risc-v-%E6%89%8B%E5%86%8C">安利一本书：《RISC-V 手册》</a><br />
书中做过一个非常形象的比喻：<br />
看ARM的指令集手册需要看半个月。<img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f633.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--flushed" title=":flushed:" alt="😳" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f633.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--flushed" title=":flushed:" alt="😳" /> 而X86的指令集手册需要一个月。<img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f633.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--flushed" title=":flushed:" alt="😳" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f633.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--flushed" title=":flushed:" alt="😳" /> 而且这种复杂程度上是没有一个人能够完全理解ARM和X86的，从时间的角度，RISC-V的复杂度只有ARM的  1/12 x86 的 1/10 ~ 1/30。事实上，当你了解了所有的指令之后，RISC-V的ISC指令摘要只有<strong>两页</strong>！！！<img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f630.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--cold_sweat" title=":cold_sweat:" alt="😰" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f630.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--cold_sweat" title=":cold_sweat:" alt="😰" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f630.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--cold_sweat" title=":cold_sweat:" alt="😰" /></p>
<p dir="auto">看了一节 我就来调戏调戏 Tina 的编译器。<br />
首先 Hello world！！！</p>
<pre><code>#include &lt;stdio.h&gt;
int main(int argc, char const *argv[])
{
    printf("Hello world\n");
    return 0;
}
</code></pre>
<p dir="auto">然后将他翻译成汇编文件。</p>
<pre><code># riscv64-unknown-linux-gnu-gcc -S hello_word.c -o hello.s
	.file	"hello_word.c"
	.option nopic
	.text
	.section	.rodata
	.align	3
.LC0:
	.string	"Hello world"
	.text
	.align	1
	.align	4
	.globl	main
	.type	main, @function
main:
	addi	sp,sp,-32
	sd	ra,24(sp)
	sd	s0,16(sp)
	addi	s0,sp,32
	mv	a5,a0
	sd	a1,-32(s0)
	sw	a5,-20(s0)
	lui	a5,%hi(.LC0)
	addi	a0,a5,%lo(.LC0)
	call	puts
	li	a5,0
	mv	a0,a5
	ld	ra,24(sp)
	ld	s0,16(sp)
	addi	sp,sp,32
	jr	ra
	.size	main, .-main
	.ident	"GCC: (C-SKY RISCV Tools V1.8.4 B20200702) 8.1.0"
</code></pre>
<ol>
<li>可以看到gcc 翻译的汇编文件多了些 特殊的标注   可以忽略  删掉。。。</li>
<li>其设定指令字长的过程也可以删掉。</li>
<li>跳转的寄存器可以只用一个 删掉。</li>
<li>计算字符串地址可以只使用一个（甚至可以不用）删掉<br />
<strong>但是在进入main函数（其他函数也是）的栈帧不能删</strong><br />
所以最后的汇编程序：</li>
</ol>
<pre><code>    .text
    .section .rodata #进入只读数据段
    .align 4 #字节对齐数据
string1:
    .string "Hello,world!\n"
.text
.align 2
.globl main
main:
    addi sp,sp,-32 #分配栈指针
    sd ra,24(sp) #存储返回地址
    lui a0,%hi(string1) #计算string1的地址
    addi a0,a0,%lo(string1)
    call puts #调用printf函数
    li	a0,0 #寄存器清零
    ld ra,24(sp) #恢复返回地址
    addi sp,sp,32 # 释放栈帧
    ret
</code></pre>
<p dir="auto">最后删掉的main函数  只需要8行指令即可，比编译出翻译来的汇编少了10行<img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f600.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--grinning" title=":grinning:" alt="😀" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f600.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--grinning" title=":grinning:" alt="😀" /> <img src="https://bbs.aw-ol.com/plugins/nodebb-plugin-emoji/emoji/android/1f600.png?v=9vrjmbh7mr2" class="not-responsive emoji emoji-android emoji--grinning" title=":grinning:" alt="😀" /> <img src="/assets/uploads/files/1627026391284-a4b95bb6-8291-4336-bf77-988a7b1d38b7-image.png" alt="a4b95bb6-8291-4336-bf77-988a7b1d38b7-image.png" class=" img-responsive img-markdown" width="1568" height="632" /></p>
]]></description><link>https://bbs.aw-ol.com/topic/230/今天看了下risc-v手册然后去调戏了一下编译器看看编译器所翻译出来的汇编是什么</link><generator>RSS for Node</generator><lastBuildDate>Sun, 07 Jun 2026 04:37:33 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/230.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Jul 2021 07:46:39 GMT</pubDate><ttl>60</ttl></channel></rss>