10

QEMU では、オペレーティング システムはソフトウェアでエミュレートされた CPU 上で実行できます。 ソフトウェアでCPUをエミュレートするにはどうすればよいですか? 詳細について知りたい。

CPU がソフトウェアによってエミュレートされる場合、レジスタはホスト システム メモリでエミュレートされますか?

ARMアセンブリコードがあるとしましょう

LDRB r0, [r1], #1

これを x86 環境でどのようにエミュレートできますか?

私の推測では、エミュレート ソフトウェアはr0(4 バイト)、r1(4 バイト) のメモリ マッピング スペースを保持し、対応するメモリ位置のレジスタ値を更新します。間違っていますか?

4

1 に答える 1

13

QEMUによって行われるARMCPUの状態の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;
于 2013-01-02T16:32:08.620 に答える