【ICS2015】簡易排程器之CPU_state
阿新 • • 發佈:2018-11-09
https://nju-ics.gitbooks.io/ics2015-programming-assignment/1.3.1.html
雖然明確提示,要使用匿名union,但是具體該怎麼表示,還是費了一番神。最開始寫出來是這樣的:
typedef struct { union{ union { uint32_t _32; uint16_t _16; uint8_t _8[2]; } gpr[8]; /* Do NOT change the order of the GPRs' definitions. */ uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi; }; swaddr_t eip; } CPU_state;
結果當然錯了,由於處於同一個union中,eax, ecx, edx, ebx, esp, ebp, esi, edi都是使用的相同的記憶體地址。
思來想去,既然有匿名union,那是不是也有匿名struct呢?
typedef struct { union{ union { uint32_t _32; uint16_t _16; uint8_t _8[2]; } gpr[8]; /* Do NOT change the order of the GPRs' definitions. */ //uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi; struct{ uint32_t eax; uint32_t ecx; uint32_t edx; uint32_t ebx; uint32_t esp; uint32_t ebp; uint32_t esi; uint32_t edi; }; }; swaddr_t eip; } CPU_state;
結果是yes。還挺有成就感,自己的猜測是正確的。
如果對c熟悉,估計沒任何難度吧.....
當然,我估計也可以直接在網上搜“cpu暫存器,結構體表示” “CPU_state"等關鍵字直接獲取結果,不過這樣就沒啥意思了。