转载:http://cmchao.pixnet.net/blog/post/16035915
在qmeu中,將qmeu 本身所執行的平台稱為 host,模擬的平台稱target,而將target code 轉為 host code 的過程稱為code generation。但因為qemu 是在動態執行中將target code 轉為 host code,所以多加了一個dynammic來形容。而整個過程在qemu 中稱為 dyngen。
0.9.1 版之前的dyngen 概念很簡單(但實作起來有很多細部的東東,整個就是複雜),dyegen 定義了四個pesudo register:env, T0, T1, T2,這四個register分別mapping 到 host 上真實的general register,在x86上就是 ebp, ebx, esi, edi,在x86_64上就是 r14, r15, r12, r13 (為什麼不是r12, r13, 14, 15,怪),定義在dyngen-exec.h
之後target 必需定義一些簡單的operation function,此operation function 被定義在每個 target-machine/op.c ,底下是target-arm 的例是,每個平台大同小異
,這些operation 很簡單,定義如何在pesudo register 之間搬資料,做一些簡單的動作。
void OPPROTO op_movl_T0_T1(void)
{
T0 =