Example #1
0
        public void ToBytesTest()
        {
            byte[] bytes;
            EncodedInstruction.ModRMByte instance;

            // The default Mod R/M byte is zero.
            instance = new EncodedInstruction.ModRMByte();
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x00 }, bytes);

            // The RM part. Note that bit 4 is put in the REX byte.
            instance = new EncodedInstruction.ModRMByte(0xF, 0x0, 0x0);
            Assert.AreEqual(0xF, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x07 }, bytes);

            // The REG part. Note that bit 4 is put in the REX byte.
            instance = new EncodedInstruction.ModRMByte(0x0, 0xF, 0x0);
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0xF, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x38 }, bytes);

            // The MOD part.
            instance = new EncodedInstruction.ModRMByte(0x0, 0x0, 0x3);
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x3, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0xC0 }, bytes);

            // All parts together.
            instance = new EncodedInstruction.ModRMByte(0x5, 0x5, 0x2);
            Assert.AreEqual(0x5, instance.RM);
            Assert.AreEqual(0x5, instance.Reg);
            Assert.AreEqual(0x2, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0xAD }, bytes);
        }
        public void ToBytesTest()
        {
            byte[] bytes;
            EncodedInstruction.ModRMByte instance;

            // The default Mod R/M byte is zero.
            instance = new EncodedInstruction.ModRMByte();
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x00 }, bytes);

            // The RM part. Note that bit 4 is put in the REX byte.
            instance = new EncodedInstruction.ModRMByte(0xF, 0x0, 0x0);
            Assert.AreEqual(0xF, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x07 }, bytes);

            // The REG part. Note that bit 4 is put in the REX byte.
            instance = new EncodedInstruction.ModRMByte(0x0, 0xF, 0x0);
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0xF, instance.Reg);
            Assert.AreEqual(0x0, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0x38 }, bytes);

            // The MOD part.
            instance = new EncodedInstruction.ModRMByte(0x0, 0x0, 0x3);
            Assert.AreEqual(0x0, instance.RM);
            Assert.AreEqual(0x0, instance.Reg);
            Assert.AreEqual(0x3, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0xC0 }, bytes);

            // All parts together.
            instance = new EncodedInstruction.ModRMByte(0x5, 0x5, 0x2);
            Assert.AreEqual(0x5, instance.RM);
            Assert.AreEqual(0x5, instance.Reg);
            Assert.AreEqual(0x2, instance.Mod);
            bytes = instance.ToBytes();
            Assert.AreEqual(new byte[] { 0xAD }, bytes);
        }