OSDev.org
https://forum.osdev.org/

C inline assembly question
https://forum.osdev.org/viewtopic.php?f=13&t=31440
Page 1 of 1

Author:  cyanide [ Sun Mar 19, 2017 10:47 am ]
Post subject:  C inline assembly question

Hi!
I have some trouble with using the inline assembly when writing in c.
I have this code:
Code:
void isr0() {
   __asm__ (
      "pusha\n"
      "push gs\n"
      "push fs\n"
      "push ds\n"
      "push es\n"
      "call interrupt_0\n"
      "pop es\n"
      "pop ds\n"
      "pop fs\n"
      "pop gs\n"
      "popa\n"
      "iret\n"
   );
}

void interrupt_0() {
   print("Divide by 0!\n");
   asm("cli");
     asm("hlt");
}


However, when I try to compile it I get an error:
Code:
kernel.o:kernel.c:(.text+0x2a9): undefined reference to `gs'
kernel.o:kernel.c:(.text+0x2af): undefined reference to `fs'
kernel.o:kernel.c:(.text+0x2b5): undefined reference to `ds'
kernel.o:kernel.c:(.text+0x2bb): undefined reference to `es'
kernel.o:kernel.c:(.text+0x2c0): undefined reference to `interrupt_0'
kernel.o:kernel.c:(.text+0x2c6): undefined reference to `es'
kernel.o:kernel.c:(.text+0x2cc): undefined reference to `ds'
kernel.o:kernel.c:(.text+0x2d2): undefined reference to `fs'
kernel.o:kernel.c:(.text+0x2d8): undefined reference to `gs'


Can someone please help me with that?

Author:  mikegonta [ Sun Mar 19, 2017 11:27 am ]
Post subject:  Re: C inline assembly question

cyanide wrote:
I have some trouble with using the inline assembly when writing in c.
However, when I try to compile it I get an error:
Can someone please help me with that?
To use intel syntax in GCC inline asm you need to use the -masm=intel option when calling GCC.

Author:  cyanide [ Sun Mar 19, 2017 11:50 am ]
Post subject:  Re: C inline assembly question

Thanks a lot, that helped :D

Author:  Octocontrabass [ Sun Mar 19, 2017 12:02 pm ]
Post subject:  Re: C inline assembly question

You can't do that in inline assembly. You have to put it in a separate assembly file, or try to figure out how __attribute__ ((interrupt)) works.

Page 1 of 1 All times are UTC - 6 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/