我的输入文件看起来像这样。
00 READ 9
01 READ 10
02 WRIT 9
03 LOAD 10
我只能使用 5 个整数变量(如 - reg1、reg2、reg3、reg4、reg5),并且必须读取每一行并将指令(如 READ)转换为其相应的代码 10。
读入的信息将存储在一个长度为 100 的整数数组中。所以前几行将被读取、转换和存储,如下所示:
0 1 2
1009 1010 1109
解决此问题的最佳方法是什么?
我的输入文件看起来像这样。
00 READ 9
01 READ 10
02 WRIT 9
03 LOAD 10
我只能使用 5 个整数变量(如 - reg1、reg2、reg3、reg4、reg5),并且必须读取每一行并将指令(如 READ)转换为其相应的代码 10。
读入的信息将存储在一个长度为 100 的整数数组中。所以前几行将被读取、转换和存储,如下所示:
0 1 2
1009 1010 1109
解决此问题的最佳方法是什么?
如我所见,每个助记符都是 4 个字节。您可以简单地分配一个 32 位整数并将其地址提供给数据读取例程以读取 4 个字节。然后“READ”会变成 1145128274,“WRIT”会变成 1414091351,依此类推。这比字符串更容易比较。
或者反过来 - 读取所有输入,然后将 (int*) 指针设置为助记符。像这样的东西:
char input[]="10 READ 09";
int* opcode = (int*)&input[3];
if( *opcode == 1145128274 ) // then it's READ
我不知道这是否是解决此问题的最有效方法,但是在读取第一个整数作为地址后,我调用了一个函数,该函数执行以下代码以将指令转换为相应的整数值。
我使用枚举将指令设置为代码开头的相应值。
getchar();
*reg1 = (int)getchar();
*reg2 = (int)getchar();
*reg3 = (int)getchar();
*reg4 = (int)getchar();
switch( *reg1 ){
case (int)'R':
if( *reg2 == (int)'E' && *reg3 == (int)'E' && *reg4 == (int)'D' ){
*reg4 = READ;
return 1;
}else{
return 0;
}
break;
case (int)'W':
...
}