Index: /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
===================================================================
--- /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp	(revision 60441)
+++ /trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp	(revision 60442)
@@ -478,4 +478,5 @@
         const char *pszFmt = pOp->pszOpcode;
         bool fIgnoresOpSize = false;
+        bool fMayNeedAddrSize = false;
         switch (pOp->uOpcode)
         {
@@ -497,50 +498,57 @@
             case OP_INSB:
                 pszFmt = "insb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_INSWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "insw"     : pDis->uOpMode == DISCPUMODE_32BIT ? "insd"  : "insq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_OUTSB:
                 pszFmt = "outsb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_OUTSWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "outsw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "outsd" : "outsq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_MOVSB:
                 pszFmt = "movsb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_MOVSWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "movsw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "movsd" : "movsq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_CMPSB:
                 pszFmt = "cmpsb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_CMPWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "cmpsw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "cmpsd" : "cmpsq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_SCASB:
                 pszFmt = "scasb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_SCASWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "scasw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "scasd" : "scasq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_LODSB:
                 pszFmt = "lodsb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_LODSWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "lodsw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "lodsd" : "lodsq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_STOSB:
                 pszFmt = "stosb";
-                fIgnoresOpSize = true;
+                fIgnoresOpSize = fMayNeedAddrSize = true;
                 break;
             case OP_STOSWD:
                 pszFmt = pDis->uOpMode == DISCPUMODE_16BIT ? "stosw"    : pDis->uOpMode == DISCPUMODE_32BIT ? "stosd" : "stosq";
+                fMayNeedAddrSize = true;
                 break;
             case OP_CBW:
@@ -650,12 +658,22 @@
 
         /*
-         * Add operand size prefix for outsb, movsb, etc.
+         * Add operand size and address prefixes for outsb, movsb, etc.
          */
-        if (fIgnoresOpSize && (pDis->fPrefix & DISPREFIX_OPSIZE) )
-        {
-            if (pDis->uCpuMode == DISCPUMODE_16BIT)
-                PUT_SZ("o32 ");
-            else
-                PUT_SZ("o16 ");
+        if (pDis->fPrefix & (DISPREFIX_OPSIZE | DISPREFIX_ADDRSIZE))
+        {
+            if (fIgnoresOpSize && (pDis->fPrefix & DISPREFIX_OPSIZE) )
+            {
+                if (pDis->uCpuMode == DISCPUMODE_16BIT)
+                    PUT_SZ("o32 ");
+                else
+                    PUT_SZ("o16 ");
+            }
+            if (fMayNeedAddrSize && (pDis->fPrefix & DISPREFIX_ADDRSIZE) )
+            {
+                if (pDis->uCpuMode == DISCPUMODE_16BIT)
+                    PUT_SZ("a32 ");
+                else
+                    PUT_SZ("a16 ");
+            }
         }
 
