Minor - reduce stack usage of handle_1587.
diff --git a/src/system.c b/src/system.c
index f3b0d08..331e452 100644
--- a/src/system.c
+++ b/src/system.c
@@ -165,11 +165,6 @@
     SET_VAR(ES, *(u16*)(si+0x28+6), 0x0000);   // base 31:24/reserved/limit 19:16
 
     asm volatile(
-        // Save registers
-        "pushw %%ds\n"
-        "pushw %%es\n"
-        "pushal\n"
-
         // Load new descriptor tables
         "lgdt %%es:(%1)\n"
         "lidt %%cs:pmode_IDT_info\n"
@@ -207,10 +202,11 @@
         // restore IDT to normal real-mode defaults
         "lidt %%cs:rmode_IDT_info\n"
 
-        // restore regisers
-        "popal\n"
-        "popw %%es\n"
-        "popw %%ds\n" : : "c" (regs->cx), "r" (si + 8));
+        // Restore %ds (from %ss)
+        "movw %%ss, %%ax\n"
+        "movw %%ax, %%ds\n"
+        : : "c" (regs->cx), "r" (si + 8)
+        : "eax", "di", "si"); // XXX - also clobbers %es
 
     set_a20(prev_a20_enable);