当前位置: 首页>>代码示例>>C#>>正文


C# MachineInstructionWriter.WriteAddress方法代码示例

本文整理汇总了C#中MachineInstructionWriter.WriteAddress方法的典型用法代码示例。如果您正苦于以下问题:C# MachineInstructionWriter.WriteAddress方法的具体用法?C# MachineInstructionWriter.WriteAddress怎么用?C# MachineInstructionWriter.WriteAddress使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MachineInstructionWriter的用法示例。


在下文中一共展示了MachineInstructionWriter.WriteAddress方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Write

 public override void Write(bool fExplicit, MachineInstructionWriter writer)
 {
     if (Base != null)
     {
         if (Offset != null)
         {
             int offset = Offset.ToInt32();
             string fmt;
             if (offset > 0)
             {
                 fmt = "({0}+{1:X2})";
             } 
             else if (offset < 0)
             {
                 offset = -offset;
                 fmt = "({0}-{1:X2})";
             }
             else 
             {
                 fmt = "({0})";
             }
             writer.Write(string.Format(fmt, Base, offset));
         }
         else
         {
             writer.Write(string.Format("({0})", Base));
         }
     }
     else
     {
         writer.Write("(");
         writer.WriteAddress(string.Format("{0:X4}", Offset.ToUInt16()), Address.Ptr16(Offset.ToUInt16()));
         writer.Write(")");
     }
 }
开发者ID:gitter-badger,项目名称:reko,代码行数:35,代码来源:MemoryOperand.cs

示例2: Write

 public override void Write(bool fExplicit, MachineInstructionWriter writer)
 {
     string s;
     if (base.Width.Size == 2)
         s = string.Format("{0:X4}", Address.ToLinear());
     else
         s = Address.ToString();
     writer.WriteAddress(s, Address);
 }
开发者ID:gitter-badger,项目名称:reko,代码行数:9,代码来源:AddressOperand.cs

示例3: Write

 public override void Write(bool fExplicit, MachineInstructionWriter writer)
 {
     writer.WriteAddress(Address.ToString(), Address);
 }
开发者ID:nemerle,项目名称:reko,代码行数:4,代码来源:AddressOperand.cs

示例4: Write

 public override void Write(bool fExplicit, MachineInstructionWriter writer)
 {
     var s = FormatValue(value);
     var pt = value.DataType as PrimitiveType;
     if (pt != null && pt.Domain == Domain.Pointer)
         writer.WriteAddress(s, Address.FromConstant(value));    //$TODO: add WriteAddress(string, Constant) to MachineINstructionWriter
     else if (value.DataType is Pointer)
         writer.WriteAddress(s, Address.FromConstant(value));
     else
         writer.Write(s);
 }
开发者ID:nemerle,项目名称:reko,代码行数:11,代码来源:MachineOperand.cs

示例5: Write

 public void Write(ArmInstructionOperand op, MachineInstructionWriter writer)
 {
     switch (op.Type)
     {
     case ArmInstructionOperandType.Immediate:
         if (instruction.Id == Opcode.B ||
             instruction.Id == Opcode.BL ||
             instruction.Id == Opcode.BLX)
         {
             writer.Write("$");
             writer.WriteAddress(
                 string.Format("{0:X8}", op.ImmediateValue.Value),
                 Address.Ptr32((uint)op.ImmediateValue.Value));
             break;
         }
         writer.Write("#");
         WriteImmediateValue(op.ImmediateValue.Value, writer);
         break;
     case ArmInstructionOperandType.CImmediate:
         writer.Write("c{0}", op.ImmediateValue);
         break;
     case ArmInstructionOperandType.PImmediate:
         writer.Write("p{0}", op.ImmediateValue);
         break;
     case ArmInstructionOperandType.Register:
         if (op.IsSubtracted)
             writer.Write('-');
         writer.Write(A32Registers.RegisterByCapstoneID[op.RegisterValue.Value].Name);
         WriteShift(op, writer);
         break;
     case ArmInstructionOperandType.Memory:
         WriteMemoryOperand(op, writer);
         break;
     case ArmInstructionOperandType.SetEnd:
         writer.Write(op.SetEndValue.ToString().ToLowerInvariant());
         break;
     default:
         throw new NotImplementedException(string.Format(
             "Can't disasseble {0} {1}. Unknown operand type: {2}",
             instruction.Mnemonic,
             instruction.Operand,
             op.Type));
     }
 }
开发者ID:nemerle,项目名称:reko,代码行数:44,代码来源:Arm32Instruction.cs

示例6: Write

		public override void Write(bool fExplicit, MachineInstructionWriter writer)
		{
			if (fExplicit)
			{
				string s;
				if (Width == PrimitiveType.Byte)
					s = "byte ptr ";
				else if (Width == PrimitiveType.Word16)
					s = "word ptr ";
				else if (Width.Size == 4)
					s = "dword ptr ";
				else if (Width == PrimitiveType.Word64)
					s = "qword ptr ";
				else if (Width == PrimitiveType.Real32)
					s = "float ptr ";
				else if (Width == PrimitiveType.Real64)
					s = "double ptr ";
				else if (Width == PrimitiveType.Real80 || Width == PrimitiveType.Bcd80)
					s = "tword ptr ";
                else if (Width == PrimitiveType.Word128)
                    s = "xmmword ptr ";
                else if (Width == PrimitiveType.Word256)
                    s = "ymmword ptr ";
                else
					throw new ArgumentOutOfRangeException();
				writer.Write(s);
			}

            if (SegOverride != RegisterStorage.None)
			{
				writer.Write(SegOverride.ToString());
				writer.Write(":");
			}
			writer.Write("[");
			if (Base != RegisterStorage.None)
			{
				writer.Write(Base.ToString());
			}
			else
			{
                var s = FormatUnsignedValue(Offset);
				writer.WriteAddress(s, Address.FromConstant(Offset));
			}

			if (Index != RegisterStorage.None)
			{
				writer.Write("+");
				writer.Write(Index.ToString());
				if (Scale > 1)
				{
					writer.Write("*");
					writer.Write(Scale);
				}
			}
			if (Base != RegisterStorage.None && Offset != null && Offset.IsValid)
			{
				if (Offset.DataType == PrimitiveType.Byte || Offset.DataType == PrimitiveType.SByte)
				{
					writer.Write(FormatSignedValue(Offset));
				}
				else
				{
                    var off = Offset.ToInt32();
                    var absOff = Math.Abs(off);
                    if (Offset.DataType.Size > 2 && off < 0 && absOff < 0x10000)
                    {
                        // Special case for negative 32-bit offsets whose 
                        // absolute value < 0x10000 (GitHub issue #252)
                        writer.Write("-");
                        writer.Write("{0:X8}", absOff);
                    }
                    else
                    {
                        writer.Write("+");
                        writer.Write(FormatUnsignedValue(Offset));
                    }
				}
			}
			writer.Write("]");
		}
开发者ID:relaxar,项目名称:reko,代码行数:80,代码来源:MemoryOperand.cs

示例7: WriteOp

 private void WriteOp(MachineOperand op, MachineInstructionWriter writer)
 {
     var rop = op as RegisterOperand;
     if (rop != null)
     {
         writer.Write(rop.Register.Name);
         return;
     }
     var immop = op as ImmediateOperand;
     if (immop != null)
     {
         writer.Write(immop.Value.ToString());
         return;
     }
     var addrop = op as AddressOperand;
     if (addrop != null)
     {
         //$TODO: 32-bit?
         writer.WriteAddress(string.Format("{0:X16}", addrop.Address.ToLinear()), addrop.Address);
         return;
     }
     throw new NotImplementedException();
 }
开发者ID:uxmal,项目名称:reko,代码行数:23,代码来源:RiscVInstruction.cs

示例8: Write

 public override void Write(bool fExplicit, MachineInstructionWriter writer)
 {
     writer.Write("$");
     writer.WriteAddress(string.Format("{0,8:X}", Address), Address);
 }
开发者ID:killbug2004,项目名称:reko,代码行数:5,代码来源:AddressOperand.cs


注:本文中的MachineInstructionWriter.WriteAddress方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。