Bladeren bron

Added offset argument to disassembler

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6473 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 jaren geleden
bovenliggende
commit
ce019c3941
2 gewijzigde bestanden met toevoegingen van 14 en 2 verwijderingen
  1. 5 1
      source/FoxARMInstructionSet.Mod
  2. 9 1
      source/FoxDisassembler.Mod

+ 5 - 1
source/FoxARMInstructionSet.Mod

@@ -2885,7 +2885,7 @@ CONST
 		END Disasm;
 
 	VAR disassembler: Disasm; codeFileName, dataFileName, logFileName: Files.FileName; codeFile, logFile: Files.File;code: BitSets.BitSet; options: Options.Options;
-		address: LONGINT;
+		address, offset: LONGINT;
 	BEGIN
 		IF context.arg.GetString(codeFileName) THEN
 			codeFile := Files.Old(codeFileName);
@@ -2893,6 +2893,7 @@ CONST
 			NEW(options);
 			options.Add("l","logFile", Options.String);
 			options.Add("a","address",Options.Integer);
+			options.Add("o","offset",Options.Integer);
 			IF options.Parse(context.arg, context.out) THEN
 				IF ~options.GetInteger("a", address) THEN address := 0 END;
 				NEW(disassembler, context.out);
@@ -2902,6 +2903,9 @@ CONST
 				ELSE
 					logFile := disassembler.GetLogFile(codeFileName)
 				END;
+				IF options.GetInteger("o",offset) THEN
+					disassembler.SetDisplacements(offset,offset)
+				END;
 				disassembler.Disassemble(code, code, 8,8 , logFile, address);
 			END;
 		END;

+ 9 - 1
source/FoxDisassembler.Mod

@@ -17,6 +17,8 @@ TYPE
 
 		PROCEDURE & Init*(w: Streams.Writer);
 		BEGIN SELF.w := w; NEW(stringWriter, 256);
+			codeDisplacement := 0; dataDisplacement := 0;
+
 		END Init;
 
 		PROCEDURE GetLogFile*(CONST binaryFileName: ARRAY OF CHAR): Files.File;
@@ -190,7 +192,6 @@ TYPE
 		PROCEDURE Disassemble*(code, data: BitSets.BitSet; codeUnit, dataUnit: LONGINT; logFile: Files.File; address: ADDRESS);
 		BEGIN
 			SELF.code := code;SELF.data := data; SELF.codeUnit := codeUnit; SELF.dataUnit := dataUnit;
-			codeDisplacement := 0; dataDisplacement := 0;
 			first := ParseLogFile(logFile); block := first;
 			IF block = NIL THEN
 				w.String("------ code ------"); w.Ln;
@@ -214,6 +215,13 @@ TYPE
 			END;
 		END Disassemble;
 
+		PROCEDURE SetDisplacements*(code, data: LONGINT);
+		BEGIN
+			codeDisplacement := code;
+			dataDisplacement := data;
+		END SetDisplacements;
+		
+
 	END Disassembler;
 
 	PROCEDURE FindPC*(context: Commands.Context);