private void Write(Arm64InstructionOperand op, MachineInstructionWriter writer)
 {
     switch (op.Type)
     {
     case Arm64InstructionOperandType.Register:
         writer.Write(A64Registers.RegisterByCapstoneID[op.RegisterValue.Value].Name);
         return;
     case Arm64InstructionOperandType.Immediate:
         if (IsJump())
         {
             writer.Write("${0:X16}", op.ImmediateValue.Value);
         }
         else 
         {
             WriteImmediateValue(op.ImmediateValue.Value, writer);
             if (op.Shifter != null)
             {
                 this.WriteShift(op, writer);
             }
         }
         return;
     }
     throw new NotImplementedException(op.Type.ToString());
 }
 private void WriteShift(Arm64InstructionOperand op, MachineInstructionWriter writer)
 {
     switch (op.Shifter.Type)
     {
     case Arm64ShifterType.ASR: WriteImmShift("asr", op.Shifter.Value, writer); break;
     case Arm64ShifterType.LSL: WriteImmShift("lsl", op.Shifter.Value, writer); break;
     case Arm64ShifterType.LSR: WriteImmShift("lsr", op.Shifter.Value, writer); break;
     case Arm64ShifterType.MSL: WriteImmShift("msl", op.Shifter.Value, writer); break;
     case Arm64ShifterType.ROR: WriteImmShift("ror", op.Shifter.Value, writer); break;
     case Arm64ShifterType.Invalid: break;
     }
 }