#include <stdio.h>
#include <stdint.h>
// 读取 misa 寄存器的函数
uint64_t read_misa() {
uint64_t misa;
asm volatile ("csrr %0, misa" : "=r" (misa));
return misa;
}
// 解析 misa 寄存器的内容
void parse_misa(uint64_t misa) {
// 解析 XLEN
//0x3(二进制:111, & 可以用于提取值)
uint8_t xlen = (misa >> 62) & 0x3; // 对于 64 位架构,XLEN 位于 [63:62]
printf("XLEN: ");
switch (xlen) {
case 1: printf("32-bit\n"); break;
case 2: printf("64-bit\n"); break;
case 3: printf("128-bit\n"); break;
default: printf("Unknown\n"); break;
}
// 解析扩展支持位,下面的写法是提取某一位
printf("Extensions: ");
if (misa & (1 << 0)) printf("A ");
if (misa & (1 << 2)) printf("C ");
if (misa & (1 << 3)) printf("D ");
if (misa & (1 << 5)) printf("F ");
if (misa & (1 << 8)) printf("I ");
if (misa & (1 << 12)) printf("M ");
if (misa & (1 << 18))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。