编写或打开程序
从示例开始、输入你自己的汇编,或打开 .s 文件。数据放在 .data 下,代码放在 .text 下。
输入带标签和伪指令的 RV32IM 汇编,然后全速运行或逐条执行。
设置断点、后退一步,在程序运行时观察寄存器、内存、机器码和控制台。
正在加载 RISC-V 模拟器…
从示例开始、输入你自己的汇编,或打开 .s 文件。数据放在 .data 下,代码放在 .text 下。
点击“运行”全速执行,或点击“单步”执行一条指令并查看哪些寄存器和内存发生了变化。点击行号旁边即可设置断点。
输入和输出都在控制台中进行。检查寄存器和内存,后退找到出错的位置,并以十六进制复制机器码。
多走了一步?“后退一步”会撤销最近的指令,包括寄存器、内存和输出,无需从头运行就能再看一遍。
call 会覆盖 ra。调用其他函数的函数必须先把 ra 保存到栈上,并在 ret 之前恢复,就像阶乘示例那样。
机器码标签页会统计每条指令执行的次数。循环体多执行了一次或从未执行,就直接说明分支写错了。
需要处理器设计的插图或课程用的视频片段?用 WaveSpeed AI 来制作。
符合条件的新账号可获得 $1 免费额度,无需绑卡。 生成器需要单独的账号和积分。RISC-V 模拟器免费使用。
免费。这款 RISC-V 在线模拟器无需账号,运行次数不限,也无需安装。
32 位基础整数指令集(RV32I)、用于乘法、除法和取余的 M 扩展,以及对 cycle、time 和 instret 计数器的读取——也就是计算机体系结构和汇编课程中讲授的核心指令集。
大多数可以。代码从 0x00400000 开始,数据从 0x10010000 开始,系统调用号也与常见教学模拟器相同(a7 = 1 打印整数、4 打印字符串、5 读取整数、10 退出等)。“参考”标签页列出了全部调用。
把调用号放入 a7、参数放入 a0,然后执行 ecall。程序读取时,控制台会请求输入:输入后按 Enter。你也可以在程序请求之前提前输入。
指令数是精确的。周期数是按简单顺序执行内核估算的:每条指令 1 个周期,加载 2 个,跳转或成立的分支 3 个,乘法 3 个,除法 33 个。
可以。“机器码”标签页显示每条指令的地址、十六进制字和反汇编形式。可以以十六进制复制(每行一个字),或下载 .hex 或原始 .bin 文件。
字必须在 4 的倍数地址读写,半字必须在 2 的倍数地址读写。请在字数据前加上 .align 2,或检查你计算出的地址。错误信息会指出地址和所在行。
可以。“后退一步”最多可撤销最近 4,096 条指令,包括寄存器、内存和输出,无需从头运行就能找到 bug。
不会。汇编和运行都在你的浏览器中进行,程序保存在此浏览器的本地存储中,下次打开依然在。
免费、私密,随时可用。