diff --git a/bootother.S b/bootother.S index 5e8348e..f243f41 100644 --- a/bootother.S +++ b/bootother.S @@ -15,8 +15,8 @@ # # This code is identical to bootasm.S except: # - it does not need to enable A20 -# - it uses 0(start-4) for the %esp -# - it jumps to 0(start-8) instead of calling cmain +# - it uses the address at start-4 for the %esp +# - it jumps to the address at start-8 instead of calling cmain .set PROT_MODE_CSEG, 0x8 # kernel code segment selector .set PROT_MODE_DSEG, 0x10 # kernel data segment selector diff --git a/defs.h b/defs.h index cbacf61..af22433 100644 --- a/defs.h +++ b/defs.h @@ -23,7 +23,7 @@ void kbd_intr(void); void panic(char*) __attribute__((noreturn)); // exec.c -int exec(char*, char**); +int exec(char*, char**); // file.c struct file* filealloc(void); diff --git a/x86.h b/x86.h index 009fa33..1ef79cb 100644 --- a/x86.h +++ b/x86.h @@ -5,6 +5,7 @@ static inline uchar inb(ushort port) { uchar data; + asm volatile("in %1,%0" : "=a" (data) : "d" (port)); return data; } @@ -91,6 +92,7 @@ static inline void cpuid(uint info, uint *eaxp, uint *ebxp, uint *ecxp, uint *edxp) { uint eax, ebx, ecx, edx; + asm volatile("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (info));