将单个程序集转换为机器代码

问题描述:

我试图将程序集转换为机器代码。我有一个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]; 
} 
+0

从阅读[问]开始。然后正确格式化这个混乱。在类型说明符之后加入'typedef'已被弃用。 – Olaf

+0

'instruction_list.opcode'应该是'get_inst.opcode'不应该吗? 'instruction_list.mnemonic'也一样。 – immibis

+0

'struct _Instruction {...} typedef指令;' - >'typedef struct _Instruction {...}指令;' –

一方面,您的结构被错误地声明。你应该这样,而不是将其格式化:

typedef struct _Instruction { 
    .... 
} Instruction; 

我不知道为什么,这不是触发语法错误,但它肯定没有帮助。

另外,你有一个变量和一个名为get_inst的函数。您调用名为get_Instruction()的不存在的函数。你可能打算命名你的功能get_Instruction()

另外,您的结构的.opcode成员是单个char。您的printf声明使用“%s”格式说明符来打印它。这需要一个字符串,这将导致printf继续读取.opcode成员的末尾,显示不可预知的垃圾并访问它应该不会触及的内存。

+0

嗨,非常感谢您的帮助,但是一个简单的问题是如何打印操作码呢?你会建议%c吗? – Jim

+0

@ Jim-“'%c'”将会打印一个字符,但是您在这里不使用ASCII字符,因此您可能会得到某些不可打印的内容。使用“0x%02x”来打印十六进制格式的单字节数字。 – bta

+0

不幸的是在获得“未定义的WinMain @ 16引用”的错误,但没有人能做到这一点,所以感谢您的帮助! – Jim