我已经定义了一些值,见下文,我不能正确使用它们。
#define add 000001
#define sub 000010
#define jmp 000111
#define IMM 10000
#define ADDR 10001
在我的代码中,我用十六进制设置了一个地址。
parameter1 = false;
parameter1 = false;
uint64_t data = 0xffffffff05001e00;
uint16_t vector[4];
memcpy(vector, &data, sizeof(uint64_t));
int currentPosition = 0;
while (currentPosition < 4) {
header = vector[currentPosition];//header
opcode = header >> 0xA & 0x3F;
src1 = header >> 0x5 & 0x1F;
src2 = header & 0x1F;
if (src1 == ADDR || src1 == IMM) { parameter1 = true; }
if (src2 == ADDR || src2 == IMM) { parameter2 = true; }
....
currentPosition++;
}
在这种情况下header = 1e00(因为它是矢量[0])
转发它将执行:opcode = 0x7,src1 = 0x10,src2 = 0x0。
这意味着在二进制文件中:000111 10000 00000 - > jmp IMM NULL
当第一个if被调用时,parameter1应该得到值true;但这从未发生过。为什么会这样?我没有正确定义IMM值?
谢谢!!!
您定义的数字都不是二进制数
#define add 000001 // octal literals because it starts with 0
#define sub 000010
#define jmp 000111
#define IMM 10000 // decimal literals
#define ADDR 10001
它们都不是你在代码中假设的二进制表示。
从C ++ 14开始,您可以编写二进制文字(例如来自https://en.cppreference.com/w/cpp/language/integer_literal):
int b = 0b101010; // C++14
一般来说,我强烈建议你不要使用qazxsw poi,除非你故意选择使用宏来解决所有问题。
要访问定义的值,我只需像这样重写它们:
#define
现在它工作正常。