1. 程式人生 > >【ICS2015】簡易排程器之CPU_state

【ICS2015】簡易排程器之CPU_state

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"等關鍵字直接獲取結果,不過這樣就沒啥意思了。