Cosmos/source2/Compiler/Cosmos.Compiler.XSharp/AddressIndirect.cs
kudzu_cp 812603b385
2011-07-18 01:09:56 +00:00

45 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cosmos.Compiler.Assembler;
using Cosmos.Compiler.Assembler.X86;
namespace Cosmos.Compiler.XSharp {
public class AddressIndirect : Address {
public readonly RegistersEnum? Register;
public readonly ElementReference Reference;
public readonly uint Address;
public readonly int Displacement;
public AddressIndirect(string aLabel, Int32 aDisplacement) {
Reference = ElementReference.New(aLabel);
Displacement = aDisplacement;
}
public AddressIndirect(Register32 aBaseRegister, Int32 aDisplacement) {
Register = Registers.GetRegister(aBaseRegister.Name);
Displacement = aDisplacement;
}
public AddressIndirect(uint aBaseAddress, int aDisplacement) {
Address = aBaseAddress;
Displacement = aDisplacement;
}
public string GetDest() {
// This is not currently used
string xResult;
if (Register != null) {
xResult = Registers.GetRegisterName(Register.Value);
//} else if (Label != null) {
// xResult = Label;
} else {
xResult = Address.ToString();
}
return xResult;
}
public override string ToString() {
return "[" + GetDest() + (Displacement == 0 ? "" : " + " + Displacement) + "]";
}
}
}