Index: /trunk/include/VBox/dis.h
===================================================================
--- /trunk/include/VBox/dis.h	(revision 41791)
+++ /trunk/include/VBox/dis.h	(revision 41792)
@@ -529,17 +529,20 @@
 /**
  * The diassembler state and result.
- *
- * @todo ModRM and SIB could be joined and 6 bytes would be saved, only it
- *       doesn't make any sense right now because of structure alignment.
  */
 typedef struct DISSTATE
 {
-    /* Because of pvUser2, put the less frequently used bits at the top for
-       now. (Might be better off in the middle?) */
-    DISOPPARAM      Param3;
-    DISOPPARAM      Param2;
-    DISOPPARAM      Param1;
-
-    /* off: 0x060 (96) */
+    /** The number of valid bytes in abInstr. */
+    uint8_t         cbCachedInstr;
+    /** SIB fields. */
+    union
+    {
+        /** Bitfield view */
+        struct
+        {
+            uint8_t     Base;
+            uint8_t     Index;
+            uint8_t     Scale;
+        } Bits;
+    } SIB;
     /** ModRM fields. */
     union
@@ -548,28 +551,9 @@
         struct
         {
-            unsigned        Rm  : 4;
-            unsigned        Reg : 4;
-            unsigned        Mod : 2;
+            uint8_t     Rm;
+            uint8_t     Reg;
+            uint8_t     Mod;
         } Bits;
-        /** unsigned view */
-        unsigned            u;
     } ModRM;
-    /** SIB fields. */
-    union
-    {
-        /** Bitfield view */
-        struct
-        {
-            unsigned        Base  : 4;
-            unsigned        Index : 4;
-            unsigned        Scale : 2;
-        } Bits;
-        /** unsigned view */
-        unsigned            u;
-    } SIB;
-    /** SIB displacment. */
-    int32_t         i32SibDisp;
-
-    /* off: 0x06c (108) */
     /** The CPU mode (DISCPUMODE). */
     uint8_t         uCpuMode;
@@ -580,5 +564,4 @@
     /** Per instruction prefix settings. */
     uint8_t         fPrefix;
-    /* off: 0x070 (112) */
     /** REX prefix value (64 bits only). */
     uint8_t         fRexPrefix;
@@ -589,19 +572,12 @@
     /** First opcode byte of instruction. */
     uint8_t         bOpCode;
-    /* off: 0x074 (116) */
     /** The size of the prefix bytes. */
     uint8_t         cbPrefix;
     /** The instruction size. */
     uint8_t         cbInstr;
-    /** The number of valid bytes in abInstr. */
-    uint8_t         cbCachedInstr;
-    /** Unused byte. */
-    uint8_t         abUnused[1];
-    /* off: 0x078 (120) */
-    /** Return code set by a worker function like the opcode bytes readers. */
-    int32_t         rc;
+    /** Unused bytes. */
+    uint8_t         abUnused[3];
     /** Internal: instruction filter */
     uint32_t        fFilter;
-    /* off: 0x080 (128) */
     /** Internal: pointer to disassembly function table */
     PCPFNDISPARSE   pfnDisasmFnTable;
@@ -614,8 +590,13 @@
     uint32_t        uPtrPadding2;
 #endif
-    /* off: 0x090 (144) */
+    /** The instruction bytes. */
+    uint8_t         abInstr[16];
+    /** SIB displacment. */
+    int32_t         i32SibDisp;
+
+    /** Return code set by a worker function like the opcode bytes readers. */
+    int32_t         rc;
     /** The address of the instruction. */
     RTUINTPTR       uInstrAddr;
-    /* off: 0x098 (152) */
     /** Optional read function */
     PFNDISREADBYTES pfnReadBytes;
@@ -623,8 +604,4 @@
     uint32_t        uPadding3;
 #endif
-    /* off: 0x0a0 (160) */
-    /** The instruction bytes. */
-    uint8_t         abInstr[16];
-    /* off: 0x0b0 (176) */
     /** User data supplied as an argument to the APIs. */
     void           *pvUser;
@@ -632,5 +609,10 @@
     uint32_t        uPadding4;
 #endif
+    /** Parameters.  */
+    DISOPPARAM      Param1;
+    DISOPPARAM      Param2;
+    DISOPPARAM      Param3;
 } DISSTATE;
+AssertCompileSize(DISSTATE, 0xb8);
 
 /** @deprecated  Use DISSTATE and change Cpu and DisState to Dis. */
Index: /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
===================================================================
--- /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp	(revision 41791)
+++ /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp	(revision 41792)
@@ -500,5 +500,5 @@
                     Assert(pDis->cbInstr >= 3);
                     PUT_SZ("db 00fh, 01fh,");
-                    PUT_NUM_8(pDis->ModRM.u);
+                    PUT_NUM_8(MAKE_MODRM(pDis->ModRM.Bits.Mod, pDis->ModRM.Bits.Reg, pDis->ModRM.Bits.Rm));
                     for (unsigned i = 3; i < pDis->cbInstr; i++)
                     {
