Cosmos/source/Cosmos.Assembler/x86/_Infra/InstructionWithDestination.cs
2014-12-20 17:36:45 +01:00

79 lines
No EOL
2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Cosmos.Assembler.x86 {
public abstract class InstructionWithDestination : Instruction, IInstructionWithDestination{
public InstructionWithDestination()
{
}
public InstructionWithDestination(string mnemonic):base(mnemonic)
{
}
public Cosmos.Assembler.ElementReference DestinationRef {
get;
set;
}
public RegistersEnum? DestinationReg
{
get;
set;
}
public uint? DestinationValue
{
get;
set;
}
public bool DestinationIsIndirect {
get;
set;
}
public int DestinationDisplacement {
get;
set;
}
public bool DestinationEmpty
{
get;
set;
}
public override bool IsComplete( Cosmos.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( Cosmos.Assembler.Assembler aAssembler, ref ulong aAddresss )
{
if (DestinationRef != null) {
DestinationValue = 0xFFFFFFFF;
}
base.UpdateAddress(aAssembler, ref aAddresss);
}
public override void WriteText( Cosmos.Assembler.Assembler aAssembler, System.IO.TextWriter aOutput )
{
aOutput.Write(mMnemonic);
String destination = this.GetDestinationAsString();
if (!(DestinationEmpty && destination.Equals("")))
{
aOutput.Write(" ");
aOutput.Write(destination);
}
}
}
}