Ale*_*kin 3 cpu assembly specifications program-counter riscv
当程序计数器 (PC) 溢出时,RISC-V CPU 上会发生什么?
\n例如,执行 0xFFFF\xe2\x80\x99FFFC 处的(32 位)NOP 后,RV32G IALIGN\xc2\xa0= 32 上会发生什么?或者在 RV32GC 上执行 0xFFFF\xe2\x80\x99FFFE 处的 16 位 NOP 后?这两个问题的最简单答案是 \xe2\x80\x9c 没什么,执行从 0x0000\xe2\x80\x990000\xe2\x80\x9d 开始,但是在 0xFFFF\ 处执行 16 位 NOP 后 RV32GC 上会发生什么xe2\x80\x99FFFC 已被执行?同样的答案意味着指令获取可能需要跨越地址空间的末尾,这在架构上听起来并不令人愉快。(话又说回来,对于 IALIGN\xc2\xa0= 16,指令获取可能必须跨越页面边界,这听起来也不那么令人愉快,而且 IIRC x86 实现已经为部分故障引起了很多欢闹。指令获取。)
\n最好参考规范PDF ,尽管我还没有\xe2\x80\x99t 能够在那里找到任何相关内容。如果做不到这一点,\xe2\x80\x99d 听听实际的硬件实现在这种情况下会做什么会很有趣。
\nhttps://riscv.org/wp-content/uploads/2019/12/riscv-spec-20191213.pdf
\n\n\n\n\n1.4 内存
\nRISC-V hart 具有 2 XLEN字节的单字节可寻址地址空间,用于所有内存访问。\n内存字定义为 32 位(4 字节)。相应地,半字为16位(2字节),双字为64位(8字节),四字为128位(16字节)。内存地址空间是循环的,因此地址 2 XLEN \xe2\x88\x921 处的字节与地址 0 处的字节相邻。因此,硬件完成的内存地址计算会忽略溢出,而是以 2 XLEN为模进行回绕。
\n
这对我来说表明 PC 回绕,因为递增它是内存地址计算。
\n