Przeglądaj źródła

Disabled support for using 32-bit registers in memory operands in 64-bit mode

Although technically-speaking allowed, a 32-bit register used in a memory operand almost never yields the intended behaviour and is probably an oversight of the programmer.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8004 8c9fc860-2736-0410-a75d-ab315db34111
eth.negelef 7 lat temu
rodzic
commit
39f72982da
1 zmienionych plików z 7 dodań i 2 usunięć
  1. 7 2
      source/FoxAMD64Assembler.Mod

+ 7 - 2
source/FoxAMD64Assembler.Mod

@@ -487,8 +487,13 @@ TYPE
 								INCL (rexPrefix, rexB)
 							END;
 							IF (InstructionSet.RegisterType(operands[i].register) = reg32) & (cpuBits # bits32) THEN
-								IF Trace THEN KernelLog.String(" adr prefix "); KernelLog.Ln;   END;
-								adrPrefix := TRUE;
+								IF cpuBits = bits64 THEN
+									ErrorSI("invalid effective address (1)", mnem,operands);
+									RETURN FALSE;
+								ELSE
+									IF Trace THEN KernelLog.String(" adr prefix "); KernelLog.Ln;   END;
+									adrPrefix := TRUE;
+								END;
 							END;
 							IF InstructionSet.RegisterType(operands[i].register)=reg16 THEN
 								IF cpuBits = bits64 THEN