具有相同操作码的C虚拟机命令

我试图将一个基本的C虚拟机放在一起,该虚拟机将从汇编程序中读取二进制文件,并使用该文件基于该文件中的二进制数据执行命令。我需要将值解码为十六进制格式,然后使用它们来确定操作码和执行操作。这是我对此如何解决感到困惑的部分?我已经定义了寄存器和指令,但是我想知道如何使用Fetch函数从内存中读取“指令字节”,然后进行解码以填充OP1和/或OP2,以便确定要执行的命令,执行的操作我感到困惑的是,像pop pushreturn这样的命令,因为在此示例中,它们都具有7的相同起始操作码,并且仅在{ {1}}为push流行为40,而80return。如何将命令的所有4-8个字节传递给访存,并能够确定要执行的命令?

MAIN.C

00

INPUT.txt

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

unsigned char memory[1028];

typedef enum{
    halt,add,and,divide,mult,sub,or,popushret,interrupt,addimmediate,branchifequal,branchifless,jump,call,load,store
} Instructions;

typedef enum{
    R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,PC,OP1,OP2,Result,CIP,} Registers;

void decode( ) { // Read only from the array of bytes from fetch. Populate the OP1 and OP2 registers if appropriate. Fetch any additional memory needed to complete the instruction.

}

void fetch(int memory){ // Read instruction bytes from memory. 
    printf("%02x\n",memory);

}
int loads(char *filename){
     FILE *file = fopen(filename,"rb");
     ssize_t read;
     if(file == NULL){
         exit(-1);
     }

     while(fread(&memory,sizeof(unsigned char),1,file) == 1){
        fetch(*memory);
     }
    fclose(file);
    exit(0);
}

int main(int argc,char** argv){
    if (argc <= 1){
        printf("No file found\n");
        return -1;
    }

    char *filename = argv[1];

    loads(filename);
}

OUTPUT.TXT

74
40
77
40
11
23
heyongkun 回答:具有相同操作码的C虚拟机命令

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3047340.html

大家都在问