mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-30 04:40:14 +00:00
64 lines
No EOL
1.9 KiB
C#
64 lines
No EOL
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Indy.IL2CPU.Assembler.X86 {
|
|
public abstract class InstructionWithDestination : Instruction, IInstructionWithDestination {
|
|
public ElementReference DestinationRef {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public Guid DestinationReg {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public uint? DestinationValue {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool DestinationIsIndirect {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int DestinationDisplacement {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public override bool IsComplete(Indy.IL2CPU.Assembler.Assembler aAssembler) {
|
|
if (DestinationRef != null) {
|
|
ulong xAddress;
|
|
return base.IsComplete(aAssembler) && DestinationRef.Resolve(aAssembler, out xAddress);
|
|
}
|
|
return base.IsComplete(aAssembler);
|
|
}
|
|
|
|
public override void UpdateAddress(Indy.IL2CPU.Assembler.Assembler aAssembler, ref ulong aAddresss) {
|
|
if (DestinationRef != null) {
|
|
DestinationValue = 0xFFFFFFFF;
|
|
}
|
|
base.UpdateAddress(aAssembler, ref aAddresss);
|
|
}
|
|
|
|
|
|
public override byte[] GetData(Indy.IL2CPU.Assembler.Assembler aAssembler) {
|
|
if (DestinationRef != null) {
|
|
ulong xAddress = 0;
|
|
if (!DestinationRef.Resolve(aAssembler, out xAddress)) {
|
|
throw new Exception("Cannot resolve DestinationRef!");
|
|
}
|
|
DestinationValue = (uint)xAddress;
|
|
}
|
|
return base.GetData(aAssembler);
|
|
}
|
|
|
|
public override string ToString() {
|
|
return base.mMnemonic + " " + this.GetDestinationAsString();
|
|
}
|
|
}
|
|
} |