I have a program that reads from a file and converts assembly code into VM machine code. Instructions have different datatypes depending on the opcode, so my reader looks like this:
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);
}
}
With a line reading LDI A 1024
, I get an output of :
LDI
R1: 0
I: 1024
Instead of the expected
LDI
R1: 65
I: 1024
It appears that fscanf
is not reading the char
. I've looked at solutions that seemed to work for others and they don't seem to work here for some reason.