#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))

putao
8 声望3 粉丝

推动世界向前发展,改善民生。