C でアセンブリ エミュレータ プログラムを作成しようとすると問題が発生します。REGA、REGB、REGC、REGX AND INSP の 5 つのレジスタと、NOP、SET、AND (ビット単位の &)、OR (ビット単位の |)、10 の命令があります。 ADD、SUB、SHL(<< 左)、SHR(>>)、JMP。
プログラムはファイルから命令を読み取ります。命令と 2 つの引数を含む行があります。ほとんどの場合、1 番目の引数はレジスタ名 (REGA など) で、2 番目の引数はレジスタ名または整数にすることができます。
ファイルから指示を取得するためにsscanfを使用しています。
ADD、SUB、SHL、SHR 関数に問題があります。私のADD関数は次のとおりです。
int opcode_add(char* opcode, char *arg1, char *arg2){
int i, j;
for(i = 0; i < MAX_REGISTER; i++){
if (strcmp(register_str[i],arg1) == 0){
for(j = 0; j <=MAX_REGISTER; j++){
if(strcmp(register_str[j],arg2) == 0){
*register_ptr[i] = *register_ptr[i] + *register_ptr[j];
break;
}else {
*register_ptr[i] = *register_ptr[i] + atoi(arg2);
}
}
}
}
INSP++;
return (0);
}
この関数は、2 つのレジスタ引数が渡された場合に機能します。例えば:
SET REGA 1
SET REGB 2
ADD REGA REGB
ただし、レジスタと整数が渡された場合はそうではありません。例えば:
SET REGA 2
ADD REGA 1
問題は次の行にあります。
*register_ptr[i] = *register_ptr[i] + atoi(arg2);
私はこれをやってみました:
int y = *register_ptr[i];
int k = atoi(arg2);
int result = y+k;
*register_ptr[i] = result;
しかし、うまくいきませんでした。