gpt4 book ai didi

c - 我如何从 C 中的 32 位序列的立即数部分获取值?

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:47 27 4
gpt4 key购买 nike

我用 C 构建了一个虚拟机。为此我有说明

pushc <const>

我将命令和值保存在 32 位中。前 8 位用于命令,其余 8 位用于值。

8 位 -> 操作码24 位 -> 立即数

为此我做了一个宏

#define PUSHC 1 //1 is for the command value in the Opcode
#define IMMEDIATE(x) ((x) & 0x00FFFFFF)

更新:

**#define SIGN_EXTEND(i) ((i) & 0x00800000 ? (i) | 0xFF000000 : (i))** 

然后我加载一个无符号整数数组来测试它:

更新:

unsigned int code[] = { (PUSHC << 24 | IMMEDIATE(2)),
(PUSHC << 24 | SIGN_EXTEND(-2)),
...};

稍后在我的代码中,我想获取 pushc 命令的立即值并将该值压入堆栈...

我从数组中获取每条指令 (IR) 并构建堆栈。

更新:

 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;
}
}

...

}
}

最佳答案

只需使用按位 AND 来屏蔽低 24 位,然后在 case 中使用它:

const uint8_t opcode = (IR >> 24) & 0xff;
const uint32_t imm = (IR & 0xffffff);
switch(opcode)
{
case PUSHC:
stack[sp] = imm;
break;
}

我围绕操作码的提取进行了调整,以使 case 更易于阅读。

关于c - 我如何从 C 中的 32 位序列的立即数部分获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com