Fixed disassembling functions to handle 16-bit code segments properly.

diff --git a/programs/winedbg/memory.c b/programs/winedbg/memory.c
index 8590b21..ac438ee 100644
--- a/programs/winedbg/memory.c
+++ b/programs/winedbg/memory.c
@@ -151,7 +151,11 @@
     ADDRESS             addr;
     void               *linear;
 
-    if (lvalue->type.id == dbg_itype_none) addr = lvalue->addr;
+    if (lvalue->type.id == dbg_itype_none)
+    {
+        be_cpu->build_addr(dbg_curr_thread->handle, &dbg_context,
+                           &addr, lvalue->addr.Segment, lvalue->addr.Offset);
+    }
     else
     {
         addr.Mode = AddrModeFlat;
@@ -638,8 +642,16 @@
     {
         if (xstart)
         {
-            last.Mode = AddrModeFlat;
-            last.Offset = types_extract_as_integer(xstart);
+            if (xstart->type.id == dbg_itype_none)
+            {
+                be_cpu->build_addr(dbg_curr_thread->handle, &dbg_context,
+                                   &last, xstart->addr.Segment, xstart->addr.Offset);
+            }
+            else
+            {
+                last.Mode = AddrModeFlat;
+                last.Offset = types_extract_as_integer( xstart );
+            }
         }
         if (xend) 
             stop = types_extract_as_integer(xend);