>  2005/03/21 (月) 01:33:14        [qwerty]
> > なんとなくわかってきた(;´Д`)クシコ
> > ついでにもうイッコ教えて(;´人`)
> > 例えば俺がCでAT互換機用の新OS開発しようと思ったら
> > どうやってデバイスドライバ作ればいいの?
> > どうやってIOポートアドレス指定すればいいのかわからない
> > んですけど
> > BIOSルーチンコールするとか?
> u_char
> inb(u_int port)
> {
>         u_char  data;
>         /*
>          * We use %%dx and not %1 here because i/o is done at %dx and not at
>          * %edx, while gcc generates inferior code (movw instead of movl)
>          * if we tell it to load (u_short) port.
>          */
>         __asm __volatile("inb %%dx,%0" : "=a" (data) : "d" (port));
>         return (data);
> }
> void
> outb(u_int port, u_char data)
> {
>         u_char  al;
>         /*
>          * Use an unnecessary assignment to help gcc's register allocator.
>          * This make a large difference for gcc-1.40 and a tiny difference
>          * for gcc-2.6.0.  For gcc-1.40, al had to be ``asm("ax")'' for
>          * best results.  gcc-2.6.0 can't handle this.
>          */
>         al = data;
>         __asm __volatile("outb %0,%%dx" : : "a" (al), "d" (port));
> }

顔文字があちこちに潜んでる気がする

参考:2005/03/21(月)01時32分33秒