2012-04-12 7 views
3

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

私はそれを探しましたが、私が得たすべての結果はDOSアセンブリ言語に関するものです。

+0

(Windows用)http://showmedo.com/videotutorials/video?name=3200020&fromSeriesID=320 – 0x90

+0

+1ゲームでアセンブリをコーディングしようとしています。 :) –

答えて

0

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

.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 

これは、すべてのを前提としていますuClibcs​​のlibc/sysdeps/linuxの/ i386の/ syscall.Sを見て、(システムコールABIは、プラットフォームごとに異なります)あなたはi386のプラットフォーム上で実行していると仮定すると、

syscall引数とsyscall番号がスタックにロードされています。

Linuxカーネルの/ usr/generic/unistd.hファイルにsyscallの番号があります。

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

0

私は子供の頃、愛好家としてアセンブラで物を書きました。今私はそれをあまりにも遅く、ポータブルではないと考えています。確かにあなたのゲームはARMベースの電話でも実行したいですか?しかし、アセンブリは、あなたがx86とおそらくx86-64のためにそれを書いた後にプログラムを完全に書き換えない限り、本当にあなたにそれを与えません。

本当にアセンブラをしたいのであれば、Linux上のほとんどすべてがあるレベルまたは別のレベルでC APIを使用しているため、必要なさまざまなC-API関数を呼び出す方法を見つけるのが最大のハードルだと思います。それに対処するための最良の方法は何が必要ない小さなCプログラムを作成し、その後でそれをコンパイルすることはおそらくです:

gcc -S t.c 

これはで、あなたは何をする必要があるかのようなもののためにあなたのアセンブラを与える必要がありますファイル名はt.sです。

関連する問題