ld r2
ld r6


因此,基本上,对于我们的分配,我们需要使用C将汇编代码程序转换为十六进制。由于某种原因,所有操作都适用于add和jmp操作,对于LD操作而言,寄存器的二进制转换(R1 = 001) ,R2 = 010等)不会附加到称为binaryArray的字符数组

char binaryArray[20];//stores the machine code


我有一个令牌循环,将每个操作码和运算符分开,可以肯定的是,这部分工作正常,因为我适用于add和jmp代码块。

while (token != NULL){
    if (ld == false) break;
    strcpy(binaryArray, "0010");
    if (strcmp(token, "r0") == 0){
        registerCounter++;
        strcat(binaryArray, "000");
    }else if (strcmp(token, "r1") == 0){
        registerCounter++;
        strcat(binaryArray, "001");
    }else if (strcmp(token, "r2") == 0){
        registerCounter++;
        strcat(binaryArray, "Reg2");
        printf("IT HIT R2!\n");
    }else if (strcmp(token, "r3") == 0){
        registerCounter++;
        strcat(binaryArray, "011");
    }else if (strcmp(token, "r4") == 0){
        registerCounter++;
        strcat(binaryArray, "100");
    }else if (strcmp(token, "r5") == 0){
        registerCounter++;
        strcat(binaryArray, "101");
    }else if (strcmp(token, "r6") == 0){
        registerCounter++;
        strcat(binaryArray, "110");
    }else if (strcmp(token, "r7") == 0){
        registerCounter++;
        strcat(binaryArray, "111");
    }
    token=strtok(NULL, delimiters);
}


对于LD指令中的一个,它以R2作为其第一寄存器。所以我希望输出是0010Reg2,但是相反,它只是打印为0010,而奇怪的是,它也打印了IT HIT R2,这意味着它也应该提取strcat(binaryArray,“ Reg2” );
输出:

IT HIT R2!
0010
0010


非常感谢您的帮助。谢谢。

最佳答案

在binaryArray构建为“ 0010Reg2”之后,您无需将其打印出来,而是在while循环顶部用新的“ 0010”覆盖。然后,所有的if都失败了,并且退出了一段时间。因此,仅输出将“ 0010”复制到binaryArray中的结果。您需要在while循环内对binaryArray进行操作,以免被覆盖。

10-08 00:11