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); }