C inline assembly question

Programming, for all ages and all languages.
Post Reply
cyanide
Posts: 2
Joined: Sun Mar 19, 2017 10:43 am

C inline assembly question

Post by cyanide »

Hi!
I have some trouble with using the inline assembly when writing in c.
I have this code:

Code: Select all

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: Select all

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?
mikegonta
Member
Member
Posts: 229
Joined: Thu May 19, 2011 5:13 am
Contact:

Re: C inline assembly question

Post by mikegonta »

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.
Mike Gonta
look and see - many look but few see

https://mikegonta.com
cyanide
Posts: 2
Joined: Sun Mar 19, 2017 10:43 am

Re: C inline assembly question

Post by cyanide »

Thanks a lot, that helped :D
Octocontrabass
Member
Member
Posts: 5513
Joined: Mon Mar 25, 2013 7:01 pm

Re: C inline assembly question

Post by Octocontrabass »

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.
Post Reply