You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
因为RAM中的数据是加载的objdump从elf可执行文件中生成的bin文件,可执行文件中从虚拟地址64'h0000_0000_8000_0000开始重定位,分配地址,而bin文件中将指令和数据从0开始放置。举个例子,int a = b[0]假设需要lw指令将b[0]的数据从内存中加载到寄存器里面,当我们生成可执行文件后,在链接的时候会进行重定位,根据规范,编译器会假设这个程序放置在从虚拟地址64'h0000_0000_8000_0000开始的一段空间,然后我们根据b[0]在数据段中的偏移和64‘h8000_0000这两个数可以计算b[0]的虚拟地址,最后填写到lw指令中,当你自己写的CPU运行到该指令时,会很自然地想要读取RAM这个地址(大于0x8000_0000)的数据,本来按照正常情况,这个地址确实应该有你想要的数据,但是我们bin文件是假设数据从0开始放置的,所以就需要你转换一下,减去0x8000_0000。
Originally posted by @codefuturedalao in #9 (comment)
The text was updated successfully, but these errors were encountered: