在 QEMU 中,操作系统可以在软件模拟 CPU 之上运行。 CPU 如何被软件模拟? 我想了解详情。
如果 CPU 由软件模拟,寄存器是否由主机系统内存模拟?
假设有ARM汇编代码
LDRB r0, [r1], #1
如何在 x86 环境中模拟它?
我的猜测是仿真软件为r0
(4 字节)、r1
(4 字节)保留内存映射空间,然后更新相应内存位置的寄存器值。 ..我错了吗?
最佳答案
请参阅this file用于由 QEMU 完成的 ARM CPU 状态的 C 级建模。
它非常简单明了,而且(当然)正如您所怀疑的那样,寄存器(和所有其他状态)被建模为 C 变量。
核心结构开始:
typedef struct CPUARMState {
/* Regs for current mode. */
uint32_t regs[16];
/* Frequently accessed CPSR bits are stored separately for efficiency.
This contains all the other bits. Use cpsr_{read,write} to access
the whole CPSR. */
uint32_t uncached_cpsr;
uint32_t spsr;
关于linux - QEMU CPU仿真原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125524/