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进行操作,以免被覆盖。