将单个程序集转换为机器代码
问题描述:
我试图将程序集转换为机器代码。我有一个MINGW编译器,如果我输入./convert.exe mov%a,那么它应该输出0x01 0xc0。我正在考虑使用一个结构列出每个汇编代码及其相应的机器值。此刻,我不断收到类似于“请求会员操作码而不是结构”的错误。任何帮助,将不胜感激。将单个程序集转换为机器代码
#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];
}
答
一方面,您的结构被错误地声明。你应该这样,而不是将其格式化:
typedef struct _Instruction {
....
} Instruction;
我不知道为什么,这不是触发语法错误,但它肯定没有帮助。
另外,你有一个变量和一个名为get_inst
的函数。您调用名为get_Instruction()
的不存在的函数。你可能打算命名你的功能get_Instruction()
。
另外,您的结构的.opcode
成员是单个char
。您的printf
声明使用“%s
”格式说明符来打印它。这需要一个字符串,这将导致printf
继续读取.opcode
成员的末尾,显示不可预知的垃圾并访问它应该不会触及的内存。
从阅读[问]开始。然后正确格式化这个混乱。在类型说明符之后加入'typedef'已被弃用。 – Olaf
'instruction_list.opcode'应该是'get_inst.opcode'不应该吗? 'instruction_list.mnemonic'也一样。 – immibis
'struct _Instruction {...} typedef指令;' - >'typedef struct _Instruction {...}指令;' –