linux - QEMU CPU仿真原理

标签 linux qemu emulation

在 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/

相关文章:

ios - Cordova 构建 iOS 应用程序并打开模拟器但不安装

c# - 什么是移植到 Silverlight 3 的好模拟器?

linux - 在内核空间中获取完整的内核版本

linux - 在 linux 中截断日志文件后,新创建的文件充满了许多\0

linux - Bamboo :错误:找不到或加载主类 org.apache.tools.ant.launch.Launcher

linux - 从 Eclipse Luna 中删除 Gnome 样式

qemu - qemu-nbd 的下一个免费设备选项

networking - 如何替换 `qemu-system -redir` 命令参数?

http - libvirt xml : host starting with image in remote server

android - 为 Android 模拟器使用系统主机文件