diff --git a/hdr/portab.h b/hdr/portab.h
index bc79aed..6f2ed46 100644
--- a/hdr/portab.h
+++ b/hdr/portab.h
@@ -162,7 +162,7 @@ static inline void enable(void)
 static inline unsigned short getCS(void)
 {
   unsigned short ret;
-  asm volatile("mov %%cs, %0" : "=r"(ret));
+  asm volatile("{ mov %%cs, %0 | mov %0, cs }" : "=r"(ret));
   return ret;
 }
 
@@ -170,7 +170,7 @@ static inline unsigned short getCS(void)
 static inline unsigned short getSS(void)
 {
   unsigned short ret;
-  asm volatile("mov %%ss, %0" : "=r"(ret));
+  asm volatile("{ mov %%ss, %0 | mov %0, ss }" : "=r"(ret));
   return ret;
 }
 extern char DosDataSeg[];
diff --git a/kernel/chario.c b/kernel/chario.c
index 4041f96..1a3e212 100644
--- a/kernel/chario.c
+++ b/kernel/chario.c
@@ -152,7 +152,7 @@ STATIC void fast_put_char(unsigned char chr)
     _AL = chr;
     __int__(0x29);
 #elif defined(__GNUC__)
-    asm volatile("int $0x29":: "a"(chr):"bx");
+    asm volatile("{ int $0x29 | int 0x29 }":: "a"(chr):"bx");
 #elif defined(I86)
     asm
     {
diff --git a/kernel/inthndlr.c b/kernel/inthndlr.c
index 46422c8..36d908b 100644
--- a/kernel/inthndlr.c
+++ b/kernel/inthndlr.c
@@ -178,7 +178,7 @@ VOID ASMCFUNC int21_syscall(iregs FAR * irp)
 #if !defined __GNUC__ || defined  __IA16_FEATURE_ATTRIBUTE_NO_ASSUME_SS_DATA
           irp->DX = FP_SEG(os_release);
 #else  /* TODO: remove this hacky SS != DGROUP workaround  --tkchia 20191207 */
-          asm volatile("movw %%ds, %0" : "=g" (irp->DX));
+          asm volatile("{ movw %%ds, %0 | mov %0, ds }" : "=g" (irp->DX));
 #endif
           irp->AX = FP_OFF(os_release);
       }
diff --git a/kernel/main.c b/kernel/main.c
index 33e7841..123d3e2 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -840,7 +840,7 @@ STATIC void CheckContinueBootFromHarddisk(void)
 
   {
 #if __GNUC__
-    asm volatile("jmp $0,$0x7c00");
+    asm volatile("{ jmp $0,$0x7c00 | jmp 0,0x7c00 }"::);
 #else
     void (far *reboot)(void) = (void (far*)(void)) MK_FP(0x0,0x7c00);
 
diff --git a/kernel/makefile b/kernel/makefile
index 8768820..be081db 100644
--- a/kernel/makefile
+++ b/kernel/makefile
@@ -137,37 +137,45 @@ task.obj: task.c        $(HEADERS) $(TARGET).lnk
 
 config.obj:   config.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 initoem.obj:  initoem.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 main.obj:     main.c  $(INITHEADERS) $(TARGET).lnk 
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 inithma.obj:  inithma.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 dyninit.obj:  dyninit.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 initdisk.obj: initdisk.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 initclk.obj: initclk.c  $(INITHEADERS) $(TARGET).lnk  
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
 
 #the string functions for INIT_TEXT
 iasmsupt.obj: asmsupt.asm $(TARGET).lnk
-	$(NASM) -D$(COMPILER) -D_INIT -f obj $(NASMFLAGS) -o iasmsupt.obj asmsupt.asm
+	$(NASM) -D$(COMPILER) -D_INIT -f obj $(NASMFLAGS) -o iasmsupt.obj asmsupt.asm -l iasmsupt.lst
 
 #the printf for INIT_TEXT - yet another special case, this file includes prf.c
 iprf.obj: iprf.c prf.c $(HDR)portab.h $(TARGET).lnk
 	$(CC) $(INITCFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
 	$(INITPATCH) $*.obj
diff --git a/kernel/prf.c b/kernel/prf.c
index baa01f0..2470368 100644
--- a/kernel/prf.c
+++ b/kernel/prf.c
@@ -75,7 +75,7 @@ void put_console(int c)
     __int__(0xe6);
 #elif defined(__GNUC__)
     asm volatile(
-      "int $0xe6\n"
+      "{ int $0xe6 | int 0xe6 }"
       : /* outputs */
       : /* inputs */ "a"(0x13), "e"(FP_SEG(buff)), "d"(FP_OFF(buff))
     );
@@ -126,7 +126,7 @@ void put_console(int c)
   fastComPrint(c);
 #endif
 #elif defined(__GNUC__)
-  asm volatile("int $0x29" : : "a"(c) : "bx");
+  asm volatile("{ int $0x29 | int 0x29 }" : : "a"(c) : "bx");
 #elif defined(I86)
   __asm
   {
diff --git a/mkfiles/gcc.mak b/mkfiles/gcc.mak
index abc09de..dbf5583 100644
--- a/mkfiles/gcc.mak
+++ b/mkfiles/gcc.mak
@@ -57,8 +57,8 @@ CFLAGSC=
 # -mfar-function-if-far-return-type treat `int __far f ();' as a far function
 
 ALLCFLAGS+=-I../hdr $(TARGETOPT) -mcmodel=small -fleading-underscore -fno-common -fpack-struct -ffreestanding -fcall-used-es -mrtd -Wno-pointer-to-int-cast -Wno-pragmas -Werror -Os -fno-strict-aliasing -mfar-function-if-far-return-type
-INITCFLAGS=$(ALLCFLAGS) -o $@
-CFLAGS=$(ALLCFLAGS) -o $@
+INITCFLAGS=$(ALLCFLAGS) -o $@ -masm=intel -Wa,-a=$*.lst -Wa,--listing-cont-lines=9999 -Wa,--listing-rhs-width=9999 -Wa,--listing-lhs-width=2 -Wa,-ag
+CFLAGS=$(ALLCFLAGS) -o $@ -masm=intel -Wa,-a=$*.lst -Wa,--listing-cont-lines=9999 -Wa,--listing-rhs-width=9999 -Wa,--listing-lhs-width=2 -Wa,-ag
 
 DIRSEP=/
 RM=rm -f
@@ -78,7 +78,8 @@ LINK=$(XLINK) -Tkernel.ld -nostdlib -Wl,-Map,kernel.map -o kernel.exe $(OBJS) -W
 
 #               *Implicit Rules*
 .asm.obj :
-	$(NASM) -D$(COMPILER) $(NASMFLAGS) -o $@ $<
+	$(NASM) -D$(COMPILER) $(NASMFLAGS) -o $@ $< -l $*.lst
 
 .c.obj :
 	$(CC) $(CFLAGS) $*.c
+	objdump --reloc $*.obj > $*.rel || true
diff --git a/sys/makefile b/sys/makefile
index 5e64bec..ccc4393 100644
--- a/sys/makefile
+++ b/sys/makefile
@@ -52,7 +52,8 @@ fdkrncfg.obj:   fdkrncfg.c ../hdr/kconfig.h
 talloc.obj:     talloc.c
 
 sys.com:        $(SYS_EXE_dependencies)
-		$(CL) $(CFLAGST) $(TINY) $(SYS_EXE_dependencies)
+		$(CL) $(CFLAGST) $(TINY) $(SYS_EXE_dependencies) -Wl,-Map,sys.map
+		convlist.pl sys.map sys.lst > sys.tls
 
 clobber:	clean
 		-$(RM) bin2c.exe bin2c.com sys.com fat*.h oemfat*.h
@@ -62,5 +63,7 @@ clean:
 
 #		*Individual File Dependencies*
 sys.obj: sys.c ../hdr/portab.h ../hdr/device.h fat12com.h fat16com.h fat32chs.h fat32lba.h oemfat12.h oemfat16.h
-		$(CC) $(CFLAGS) $*.c
-
+		$(CC) $(CFLAGS)  -masm=intel -Wa,-a=$*.lst \
+		-Wa,--listing-cont-lines=9999 -Wa,--listing-rhs-width=9999 \
+		-Wa,--listing-lhs-width=2 -Wa,-ag $*.c
+		objdump --reloc $*.obj > $*.rel || true
diff --git a/sys/sys.c b/sys/sys.c
index 6e79b2d..943b9a5 100644
--- a/sys/sys.c
+++ b/sys/sys.c
@@ -108,14 +108,25 @@ struct _diskfree_t {
 int int86x(int ivec, union REGS *in, union REGS *out, struct SREGS *s)
 {
   /* must save sp for int25/26 */
-  asm("mov %7, %%cs:(1f+1); jmp 0f; 0:"
+  asm("{"
+      "mov %7, %%cs:(1f+1); jmp 0f; 0:"
       "mov %%di, %%dx; mov %%sp, %%di;"
       "push %%di; push %%di;"
       /* push twice to work both for int 25h/26h and int 21h */
       "1:int $0x00; pop %%di; pop %%di;"
       /* second pop always reads the correct SP value.
          the first pop may read the FL left on stack. */
-      "mov %%di, %%sp; sbb %0, %0" :
+      "mov %%di, %%sp; sbb %0, %0;"
+      " | "
+      "mov byte ptr cs:[1f+1], %7; jmp 0f; 0:"
+      "mov dx, di; mov di, sp;"
+      "push di; push di;"
+      /* push twice to work both for int 25h/26h and int 21h */
+      "1:int 0x00; pop di; pop di;"
+      /* second pop always reads the correct SP value.
+         the first pop may read the FL left on stack. */
+      "mov sp, di; sbb %0, %0;"
+      "}" :
       "=r"(out->x.cflag),
       "=a"(out->x.ax), "=b"(out->x.bx), "=c"(out->x.cx), "=d"(out->x.dx),
       "=e"(s->es), "=Rds"(s->ds) :
@@ -140,7 +151,11 @@ int intdos(union REGS *in, union REGS *out)
 
 int intdosx(union REGS *in, union REGS *out, struct SREGS *s)
 {
-  asm("push %%ds; mov %%bx, %%ds; int $0x21; pop %%ds; sbb %0, %0":
+  asm("{"
+      "push %%ds; mov %%bx, %%ds; int $0x21; pop %%ds; sbb %0, %0\n"
+      " | "
+      "push ds; mov ds, bx; int 0x21; pop ds; sbb %0, %0\n"
+      "}" :
       "=r"(out->x.cflag), "=a"(out->x.ax) :
       "a"(in->x.ax), "c"(in->x.cx), "d"(in->x.dx),
       "D"(in->x.di), "S"(in->x.si), "b"(s->ds), "e"(s->es) :
