示例#1
0
 private static bool RSYb(ulong uInstr, zSeriesDisassembler dasm)
 {
     var r1 = Registers.GpRegisters[(uInstr >> 36) & 0xF];
     var m3 = (byte)((uInstr >> 32) & 0xF);
     var b2 = Registers.GpRegisters[(uInstr >> 28) & 0xF];
     var d2 = Bitfield.ReadSignedFields(rsya_offset, (uint)uInstr);
     dasm.ops.Add(new RegisterOperand(r1));
     dasm.ops.Add(ImmediateOperand.Byte(m3));
     dasm.ops.Add(dasm.CreateAccess(b2, d2));
     return true;
 }
        private static Mutator <MilStd1750Disassembler> Reg(int bitpos)
        {
            var bitfield = new Bitfield(bitpos, 4);

            return((u, d) =>
            {
                var iReg = bitfield.Read(u);
                d.ops.Add(new RegisterOperand(Registers.GpRegs[iReg]));
                return true;
            });
        }
示例#3
0
        private static bool RXYa(ulong uInstr, zSeriesDisassembler dasm)
        {
            var r1 = new RegisterOperand(Registers.GpRegisters[(uInstr >> 36) & 0xF]);
            var x2 = Registers.GpRegisters[(uInstr >> 32) & 0xF];
            var b2 = Registers.GpRegisters[(uInstr >> 28) & 0xF];
            var d2 = Bitfield.ReadSignedFields(rxya_offset, (uint)uInstr);

            dasm.state.ops.Add(r1);
            dasm.state.ops.Add(dasm.CreateAccess(b2, x2, d2));
            return(true);
        }
示例#4
0
        internal static Mutator <PowerPcDisassembler> s(int bitOffset, int len)
        {
            var field = new Bitfield(bitOffset, len);

            return((u, d) =>
            {
                var op = new ImmediateOperand(Constant.Int32(field.ReadSigned(u)));
                d.ops.Add(op);
                return true;
            });
        }
示例#5
0
        private static Mutator <MCoreDisassembler> Imm(int bitpos, int bitlen)
        {
            var immField = new Bitfield(bitpos, bitlen);

            return((u, d) =>
            {
                var imm = immField.Read(u);
                d.ops.Add(ImmediateOperand.Word32(imm));
                return true;
            });
        }
示例#6
0
        private static Mutator <Avr32Disassembler> Imm_signedShifted(int bitPos, int length, int shift)
        {
            var bitfield = new Bitfield(bitPos, length);

            return((u, d) =>
            {
                var imm = bitfield.ReadSigned(u) << shift;
                d.ops.Add(ImmediateOperand.Word32(imm));
                return true;
            });
        }
示例#7
0
        /// <summary>
        /// Register.
        /// </summary>
        private static Mutator <C166Disassembler> R(int bitPos, RegisterStorage [] regs)
        {
            var regField = new Bitfield(bitPos, 4);

            return((u, d) =>
            {
                var reg = regs[regField.Read(u)];
                d.ops.Add(new RegisterOperand(reg));
                return true;
            });
        }
示例#8
0
        private static Mutator <OpenRISCDisassembler> Iu(int bitPos, int bitLength)
        {
            var field = new Bitfield(bitPos, bitLength);

            return((u, d) =>
            {
                var n = field.Read(u);
                d.ops.Add(new ImmediateOperand(Constant.Create(d.arch.WordWidth, n)));
                return true;
            });
        }
示例#9
0
        public void CastToUShort_SameAsParsedFrom_True(ushort value)
        {
            // Arrange
            Bitfield.Validate(value, out var bitfield);

            // Act
            var result = (ushort)bitfield;

            // Assert
            Assert.That(result, Is.EqualTo(value));
        }
示例#10
0
        public void Version_Is_Correct(ushort value, int expectedVersion)
        {
            // Arrange
            Bitfield.Validate(value, out var bitfield);

            // Act
            var version = bitfield.Version;

            // Assert
            Assert.That(version, Is.EqualTo(expectedVersion));
        }
示例#11
0
        public void OperatorDoesNotEqual_UShort_True(ushort value)
        {
            // Arrange
            Bitfield.Validate(value, out var bitfield);

            // Act
            var result = bitfield != (ushort)~value;

            // Assert
            Assert.That(result, Is.True);
        }
示例#12
0
        public void Equals_MethodUShort_True(ushort value)
        {
            // Arrange
            Bitfield.Validate(value, out var bitfield);

            // Act
            var result = bitfield.Equals(value);

            // Assert
            Assert.That(result, Is.True);
        }
示例#13
0
 // rf: encoded register identifier in multiple fields.
 private static Mutator<NanoMipsDisassembler> rf(Bitfield[] fields, int[] gprEncoding)
 {
     return (u, d) =>
     {
         var iEncodedReg = (int) Bitfield.ReadFields(fields, u);
         var iReg = gprEncoding[iEncodedReg];
         var reg = d.arch.GetRegister(iReg);
         d.ops.Add(new RegisterOperand(reg));
         return true;
     };
 }
示例#14
0
 // Rw: 5-bit register identifier from a wide instruction
 private static WideMutator<NanoMipsDisassembler> Rw(int pos)
 {
     var field = new Bitfield(pos, 5);
     return (u, d) =>
     {
         var iReg = (int) field.Read(u);
         var reg = d.arch.GetRegister(iReg);
         d.ops.Add(new RegisterOperand(reg));
         return true;
     };
 }
示例#15
0
        private static Mutator <Cr16cDisassembler> Reg(int bitpos)
        {
            var regfield = new Bitfield(bitpos, 4);

            return((u, d) =>
            {
                var ireg = regfield.Read(u);
                d.ops.Add(new RegisterOperand(Registers.GpRegisters[ireg]));
                return true;
            });
        }
示例#16
0
        private static Mutator <LatticeMico32Disassembler> PcRel(int bitpos, int bitsize)
        {
            var field = new Bitfield(bitpos, bitsize);

            return((u, d) =>
            {
                var offset = field.ReadSigned(u) << 2;
                d.ops.Add(AddressOperand.Create(d.addr + offset));
                return true;
            });
        }
示例#17
0
        private static Mutator <V850Disassembler> Is(int bitpos, int bitlen)
        {
            var field = new Bitfield(bitpos, bitlen);

            return((u, d) =>
            {
                var imm = field.ReadSigned(u);
                d.ops.Add(ImmediateOperand.Word32(imm));
                return true;
            });
        }
示例#18
0
文件: Disassembler.cs 项目: qcyb/reko
        public static Mutator <Disassembler> Reg(int n)
        {
            var regField = new Bitfield(n, 4);

            return((u, d) =>
            {
                var nReg = regField.Read(u);
                d.operands.Add(RegOps[nReg]);
                return true;
            });
        }
示例#19
0
        internal static Mutator <YmpDisassembler> ImmFrom(uint from, PrimitiveType dt, int bitpos, int bitlen)
        {
            var bitfield = new Bitfield(bitpos, bitlen);

            return((u, d) =>
            {
                var imm = from - bitfield.Read(u);
                d.ops.Add(new ImmediateOperand(Constant.Create(dt, imm)));
                return true;
            });
        }
示例#20
0
        // F - 5-bit floating point register encoding.
        private static Mutator <MicroMipsDisassembler> F(int bitpos)
        {
            var field = new Bitfield(bitpos, 5);

            return((u, d) =>
            {
                var iReg = (int)field.Read(u);
                d.ops.Add(new RegisterOperand(d.arch.fpuRegs[iReg]));
                return true;
            });
        }
示例#21
0
        private static Mutator <YmpDisassembler> Imm(PrimitiveType dt, int bitpos, int bitlen, uint nFrom)
        {
            var bitfield = new Bitfield(bitpos, bitlen);

            return((u, d) =>
            {
                var imm = bitfield.Read(u);
                d.ops.Add(new ImmediateOperand(Constant.Create(dt, nFrom - imm)));
                return true;
            });
        }
示例#22
0
        private static Mutator <Avr32Disassembler> Imm_unsignedShifted(PrimitiveType dt, int bitPos, int length, int shift)
        {
            var bitfield = new Bitfield(bitPos, length);

            return((u, d) =>
            {
                var imm = bitfield.Read(u) << shift;
                d.ops.Add(new ImmediateOperand(Constant.Create(dt, imm)));
                return true;
            });
        }
示例#23
0
        // Unsigned immediate
        private static Mutator <RiscVDisassembler> Imm(int bitPos1, int length1)
        {
            var mask = new Bitfield(bitPos1, length1);

            return((u, d) =>
            {
                var imm = Constant.Create(d.arch.WordWidth, mask.Read(u));
                d.state.ops.Add(new ImmediateOperand(imm));
                return true;
            });
        }
示例#24
0
        internal static Mutator <PowerPcDisassembler> u(int pos, int len)
        {
            var field = new Bitfield(pos, len);

            return((u, d) =>
            {
                var op = new ImmediateOperand(Constant.Byte((byte)field.Read(u)));
                d.ops.Add(op);
                return true;
            });
        }
示例#25
0
        private static Mutator <LatticeMico32Disassembler> ImmS(int bitpos, int bitsize)
        {
            var field = new Bitfield(bitpos, bitsize);

            return((u, d) =>
            {
                var imm = field.ReadSigned(u);
                d.ops.Add(ImmediateOperand.Word32(imm));
                return true;
            });
        }
示例#26
0
        public Bitfield ToBitfield()
        {
            Bitfield bitfield = new Bitfield(Size);

            for (int i = 0; i < Size; i++)
            {
                bitfield[i] = this[i];
            }

            return(bitfield);
        }
示例#27
0
        // Compressed format floating point register (fr')
        private static Mutator <RiscVDisassembler> Fc(int bitPos)
        {
            var regMask = new Bitfield(bitPos, 3);

            return((u, d) =>
            {
                var iReg = compressedRegs[regMask.Read(u)];
                var reg = new RegisterOperand(d.arch.FpRegs[iReg]);
                d.state.ops.Add(reg);
                return true;
            });
        }
示例#28
0
        // UIs - unsigned immediate, then shifted left.
        private static Mutator <MicroMipsDisassembler> UIs(int bitPos, int length, int shift)
        {
            var field = new Bitfield(bitPos, length);

            return((u, d) =>
            {
                var i = field.Read(u) << shift;
                var imm = new ImmediateOperand(Constant.Create(d.arch.WordWidth, i));
                d.ops.Add(imm);
                return true;
            });
        }
示例#29
0
        // Integer register
        private static Mutator <RiscVDisassembler> R(int bitPos)
        {
            var regMask = new Bitfield(bitPos, 5);

            return((u, d) =>
            {
                var iReg = (int)regMask.Read(u);
                var reg = new RegisterOperand(d.arch.GetRegister(iReg));
                d.state.ops.Add(reg);
                return true;
            });
        }
示例#30
0
        // r - 3-bit register encoding.
        private static Mutator <MicroMipsDisassembler> r(int bitpos, int [] encoding)
        {
            var field = new Bitfield(bitpos, 3);

            return((u, d) =>
            {
                var iReg = field.Read(u);
                var iReg32 = encoding[iReg];
                d.ops.Add(new RegisterOperand(d.arch.GetRegister(iReg32)));
                return true;
            });
        }