LINUX.ORG.RU

История изменений

Исправление X512, (текущая версия) :

Недавно писал дизассемблер RISC-V, там было такое:

	PROCEDURE (dec: Decoder) Decode* (h: WorkDecoders.Handler);
		VAR
			newLine, keepPcRelReg: BOOLEAN;
			i, opLen: INTEGER;
			pc0: INTEGER;
			op: ARRAY 12 OF SHORTINT;
			op2: INTEGER;

		PROCEDURE Op1;
		(* ... *)
		PROCEDURE Op2;
		(* ... *)

	BEGIN
		newLine := FALSE;
		keepPcRelReg := FALSE;
		pc0 := h.adr;
		ReadSInt(op[0]);
		IF BITS(op[0] MOD 10000H) * {0..6} = {0..6} THEN
			opLen := 5 + op[0] DIV ASH(1, 12) MOD ASH(1, 3);
		ELSIF BITS(op[0] MOD 10000H) * {0..6} = {0..5} THEN
			opLen := 4;
		ELSIF BITS(op[0] MOD 10000H) * {0..5} = {0..4} THEN
			opLen := 3;
		ELSIF BITS(op[0] MOD 10000H) * {0..1} = {0..1} THEN
			opLen := 2;
		ELSE
			opLen := 1;
		END;
		i := 1; WHILE i < opLen DO ReadSInt(op[i]); INC(i) END;
		i := 0; WHILE i < MIN(opLen, 2) DO
			WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
		INC(i) END;
		h.Put(09X);
		CASE opLen OF
		| 1: Op1;
		| 2: Op2;
		ELSE WriteUndef END;
		IF opLen > 2 THEN
			h.Put(0DX); h.Put(09X);
			i := 2; WHILE i < opLen DO
				IF (i # 2) & (i MOD 2 = 0) THEN h.Put(09X); h.Put(0DX); h.Put(09X) END;
				WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
			INC(i) END;
			h.Put(09X);
		END;
		IF newLine THEN h.Put(0DX) END;
		IF ~keepPcRelReg THEN pcRelReg := -1 END;
	END Decode;

Исправление X512, :

Недавно писал дизассемблер RISC-V, там было такое:

	PROCEDURE (dec: Decoder) Decode* (h: WorkDecoders.Handler);

		PROCEDURE Op1;
		(* ... *)
		PROCEDURE Op2;
		(* ... *)

		VAR
			newLine, keepPcRelReg: BOOLEAN;
			i, opLen: INTEGER;
			pc0: INTEGER;
			op: ARRAY 12 OF SHORTINT;
			op2: INTEGER;
	BEGIN
		newLine := FALSE;
		keepPcRelReg := FALSE;
		pc0 := h.adr;
		ReadSInt(op[0]);
		IF BITS(op[0] MOD 10000H) * {0..6} = {0..6} THEN
			opLen := 5 + op[0] DIV ASH(1, 12) MOD ASH(1, 3);
		ELSIF BITS(op[0] MOD 10000H) * {0..6} = {0..5} THEN
			opLen := 4;
		ELSIF BITS(op[0] MOD 10000H) * {0..5} = {0..4} THEN
			opLen := 3;
		ELSIF BITS(op[0] MOD 10000H) * {0..1} = {0..1} THEN
			opLen := 2;
		ELSE
			opLen := 1;
		END;
		i := 1; WHILE i < opLen DO ReadSInt(op[i]); INC(i) END;
		i := 0; WHILE i < MIN(opLen, 2) DO
			WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
		INC(i) END;
		h.Put(09X);
		CASE opLen OF
		| 1: Op1;
		| 2: Op2;
		ELSE WriteUndef END;
		IF opLen > 2 THEN
			h.Put(0DX); h.Put(09X);
			i := 2; WHILE i < opLen DO
				IF (i # 2) & (i MOD 2 = 0) THEN h.Put(09X); h.Put(0DX); h.Put(09X) END;
				WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
			INC(i) END;
			h.Put(09X);
		END;
		IF newLine THEN h.Put(0DX) END;
		IF ~keepPcRelReg THEN pcRelReg := -1 END;
	END Decode;

Исходная версия X512, :

Недавно писал дизассемблер RISC-V, там было такое:

	PROCEDURE (dec: Decoder) Decode* (h: WorkDecoders.Handler);

		PROCEDURE Op1;
		(* ... *)
		PROCEDURE Op2;
		(* ... *)

		VAR
			newLine, keepPcRelReg: BOOLEAN;
			i, opLen: INTEGER;
			pc0: INTEGER;
			op: ARRAY 12 OF SHORTINT;
			op2: INTEGER;
	BEGIN
		newLine := FALSE;
		keepPcRelReg := FALSE;
		pc0 := h.adr;
		ReadSInt(op[0]);
		IF BITS(op[0] MOD 10000H) * {0..6} = {0..6} THEN
			opLen := 5 + op[0] DIV ASH(1, 12) MOD ASH(1, 3);
		ELSIF BITS(op[0] MOD 10000H) * {0..6} = {0..5} THEN
			opLen := 4;
		ELSIF BITS(op[0] MOD 10000H) * {0..5} = {0..4} THEN
			opLen := 3;
		ELSIF BITS(op[0] MOD 10000H) * {0..1} = {0..1} THEN
			opLen := 2;
		ELSE
			opLen := 1;
		END;
		i := 1; WHILE i < opLen DO ReadSInt(op[i]); INC(i) END;
		i := 0; WHILE i < MIN(opLen, 2) DO
			WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
		INC(i) END;
		h.Put(09X);
		CASE opLen OF
		| 1: Op1;
		| 2: Op2;
		ELSE WriteUndef END;
		IF opLen > 2 THEN
			h.Put(0DX); h.Put(09X);
			i := 2; WHILE i < opLen DO
				IF (i # 2) & (i MOD 2 = 0) THEN h.Put(09X); h.Put(0DX); h.Put(09X) END;
				WriteHex(op[i] MOD 10000H, 4); h.Put(" ");
			INC(i) END;
			h.Put(09X);
		END;
		IF newLine THEN h.Put(0DX) END;
		IF ~keepPcRelReg THEN pcRelReg := -1 END;
	END Decode;