【发布时间】:2017-06-25 17:29:41
【问题描述】:
我有一个程序可以从文件中读取并将汇编代码转换为 VM 机器代码。指令根据操作码有不同的数据类型,所以我的阅读器看起来像这样:
while(!feof(inF)) {
fscanf(inF, "%s",&temp); //analyse first string and branch into if statement
printf("%s\n", temp);
if (strcmp(temp, "NOP") == 0 || strcmp(temp, "nop") == 0) {
fprintf(outF, "%i\n", 0);
}
else if (strcmp(temp, "LDI") == 0 || strcmp(temp, "ldi") == 0) {
opcode = LDI; //opcode 1
fscanf(inF," %c %d", &r1, &immediate); //get r1 and immediate
printf("R1: %i\n", r1);
printf("I: %i\n", immediate);
r1 = getReg(r1);
r2 = 0;
subop = 0;
output = (opcode << 27)|(r1 << 24)|(r2 << 21)|(subop << 16)|(immediate);
fprintf(outF, "%x\n", output);
}
}
使用LDI A 1024 的行,我得到以下输出:
LDI
R1: 0
I: 1024
而不是预期的
LDI
R1: 65
I: 1024
fscanf 似乎没有读取char。我查看了似乎对其他人有用的解决方案,但由于某种原因,它们似乎在这里不起作用。
【问题讨论】:
-
fscanf(inF," %c %d", &r1, &immediate);-->fscanf(inF," %i %d", &r1, &immediate);假设r1是int -
r1的类型是什么? -
关于为什么
while(!feof(inF))错误的旁注:stackoverflow.com/questions/5431941/… -
r1的类型是char
-
那么你会为文件循环推荐什么?