我正在尝试将程序集转换为机器代码。我有一个MINGW编译器,如果我键入./convert.exe mov%a,那么它应该输出0x01 0xc0。我正在考虑使用一个结构列出每个汇编代码及其相应的机器值。目前,我不断收到像#34;请求成员操作码的错误,而不是结构"。任何帮助将不胜感激。
#include <stdio.h>
#include <string.h>
struct _Instruction {
char mnemonic[10];
unsigned char opcode;} typedef Instruction;
Instruction instruction_list[] = {
{"mov", 0x01},
{"add", 0x04},
{"sub", 0x05},
{"mul",0x06},
{"div", 0x07},
{"and",0x08},
{"or",0x09},
{"xor",0x0a},
{"cmp",0x0b},
{"",-1},
};
Instruction get_inst(char mnemonic[]);
int main2(int argc, char *argv[])
{
char* instruction = argv[1];
Instruction get_inst = get_Instruction(instruction);
printf("%s ; %s",instruction_list.mnemonic,instruction_list.opcode);
return 0;
}
Instruction get_inst(char mnemonic[])
{
int i;
for(i=0; instruction_list[i].opcode != -1; i++)
{
if(!strcmp(instruction_list[i].mnemonic, mnemonic))
{
return instruction_list[i];
}
}
return instruction_list[i];
}
答案 0 :(得分:1)
首先,您的结构声明不正确。您应该将其格式化为:
typedef struct _Instruction {
....
} Instruction;
我不确定为什么没有触发语法错误,但它肯定没有帮助。
此外,您还拥有一个名为get_inst
的变量和一个函数。您调用名为get_Instruction()
的不存在的函数。你可能想要命名你的函数get_Instruction()
。
此外,您的结构的.opcode
成员是一个char
。您的printf
语句使用&#34; %s
&#34;格式说明符来打印它。这需要一个字符串,这将导致printf
继续读取.opcode
成员的末尾,显示不可预测的垃圾并访问它不应该触摸的内存。