4

Linuxアセンブリでゲームを作りたいです。Linux カーネル システム コールを介して画面に画像を表示 (または描画) する方法はありますか?

調べてみたのですが、DOSアセンブリ言語に関するものばかりでした。

4

3 に答える 3

1

それは可能ですが、最近のアセンブリでソフトウェアを開発する方法は非常に退屈で時間がかかるようです。

i386 プラットフォームで実行していると仮定すると (syscall ABI はプラットフォームごとに異なります)、uClibcs​​ libc/sysdeps/linux/i386/syscall.S を見てください。

.text
.global syscall
.type   syscall,%function
syscall:
    pushl %ebp
    pushl %edi
    pushl %esi
    pushl %ebx

    movl  44(%esp),%ebp /* Load the 6 syscall argument registers */
    movl  40(%esp),%edi
    movl  36(%esp),%esi
    movl  32(%esp),%edx
    movl  28(%esp),%ecx
    movl  24(%esp),%ebx
    movl  20(%esp),%eax /* Load syscall number into %eax.  */
    int $0x80

    popl %ebx
    popl %esi
    popl %edi
    popl %ebp

    cmpl $-4095,%eax
    jae  __syscall_error
    ret         /* Return to caller.  */

.size syscall,.-syscall

これは、すべての syscall 引数と syscall 番号がスタックにロードされていることを前提としています。

syscall 番号は、Linux カーネルの include/asm-generic/unistd.h ファイルで確認できます。

アセンブリからシステム コールを呼び出す方法がわかったので、もちろんどのシステム コールを呼び出すかを知る必要があります。Linux Framebufferを読むことをお勧めします。X とのやり取りはさらに複雑になります。

于 2012-04-12T20:40:45.623 に答える
0

カーネル関数のみを使用する場合は、vesa フレームバッファーを使用する必要があります: Using the framebuffer device under Linux . 楽しんでください=)

于 2012-04-13T17:22:59.233 に答える