1
我建立了一個虛擬機中C.而對於這一點,我有指令如何從C中的32位序列的立即部分獲取值?
我保存的命令,並在32位的值。前8位用於命令,其餘爲值。
8位 - >操作碼 24位 - >立即值
對於這種使一個宏
#define PUSHC 1 //1 is for the command value in the Opcode
#define IMMEDIATE(x) ((x) & 0x00FFFFFF)
UPDATE:
**#define SIGN_EXTEND(i) ((i) & 0x00800000 ? (i) | 0xFF000000 : (i))**
然後我加載在一個unsigned int arr中進行測試AY:
更新:
unsigned int code[] = { (PUSHC << 24 | IMMEDIATE(2)),
(PUSHC << 24 | SIGN_EXTEND(-2)),
...};
在我的代碼後,我想要得到的pushc命令的即時價值,這價值推到堆棧...
我得到的每一個指令(IR),並構建我的堆棧。
UPDATE:
void exec(unsigned int IR){
unsigned int opcode = (IR >> 24) & 0xff;
unsigned int imm = (IR & 0xffffff);
switch(opcode){
case PUSHC: {
stack[sp] = imm;
sp = sp + 1;
break;
}
}
...
}
}
這是什麼值?我不明白 – Tarasov
@塔拉索夫對不起,被你的代碼愚弄了。 :)現在從'IR'中提取兩個部分。 – unwind
感謝它的工作......你告訴我一個更好的方法......我想讓2^24計算它們......但你的方式更好:D但你知道什麼是負值如何-2或-3? :/ – Tarasov