Inline ASM troubles... [SOLVED]

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
pcmattman
Member
Member
Posts: 2566
Joined: Sun Jan 14, 2007 9:15 pm
Freenode IRC: miselin
Location: Sydney, Australia (I come from a land down under!)
Contact:

Inline ASM troubles... [SOLVED]

Post by pcmattman »

I have finally got my OS working again :D

Now I'm working on the stdlib for developers, and I've already run into a problem.

I'm trying this for my putc function:

Code: Select all

__asm__ __volatile__ ( "movb %0,%edx" : : "d" ( c ) );
__asm__ __volatile__ ( "movd $0x1,%eax" );
__asm__ __volatile__ ( "int $0x15" );


This is the syscall my operating system supports to handle the same thing as 'putc' in kernel-space. EDX is meant to hold the character.

GCC complains with this error message:

Code: Select all

putc_stdlib.c:5: error: invalid 'asm': operand number missing after %-letter


Edit: fixed it:

Code: Select all

__asm__ __volatile__ ( "movb %0,%%dl" : : "d" ( c ) );
__asm__ __volatile__ ( "movb $0x1,%al" );
__asm__ __volatile__ ( "int $0x15" );


EDIT: 4 years later... wow :)
Check out the inline assembly examples for a much better way to do this kind of thing.

Also, the actual problem is in "mov %0, %dl", which should be "mov %0, %%dl" in this context.
Post Reply