vgabios: Avoid memory references via %esp register in vgabios.

Win7 interprets the vgabios and it does not properly handle memory
references relative to the %esp register.  Commit 4a8b58cb introduced
some of these %esp references - rework that assembler to avoid these
instructions and make win7 happy.

Signed-off-by: Kevin O'Connor <>
diff --git a/vgasrc/vgaentry.S b/vgasrc/vgaentry.S
index 35747b7..a5622b8 100644
--- a/vgasrc/vgaentry.S
+++ b/vgasrc/vgaentry.S
@@ -97,12 +97,9 @@
         movl %ecx, BREGS_ecx(%eax)
         movw %es, BREGS_es(%eax)
         movl %esp, BREGS_size+0(%eax)
-        movzwl %sp, %esp
         movw %ss, BREGS_size+4(%eax)
-        movl (%esp), %edx
-        movl %edx, BREGS_code(%eax)
-        movw 4(%esp), %dx
-        movw %dx, BREGS_flags(%eax)
+        popl BREGS_code(%eax)
+        popw BREGS_flags(%eax)
         movw %ds, %dx           // Setup %ss/%esp and call function
         movw %dx, %ss