ld r2
ld r6
所以,基本上对于我们的赋值,我们需要使用C将汇编代码程序转换为十六进制。由于某些原因,对于LD操作,寄存器'所有东西都适用于add和jmp操作。二进制转换(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
,这意味着它也应该也是exectuted strcat(binaryArray," Reg2");
输出:
IT HIT R2!
0010
0010
真的很感谢你的帮助。感谢。
答案 0 :(得分:0)
在binaryArray构建之后" 0010Reg2"你不打印它,它会被一个新的" 0010"在while循环的顶部。然后所有的ifs都失败了,它就会掉出来。所以你只输出" 0010"复制到binaryArray。你需要在while循环中使用binaryArray做一些事情,所以它不会被覆盖。