私はLinuxアセンブリでゲームをしたいです。 Linuxカーネルのシステムコールを使って画面に画像を表示(または描画)する方法はありますか?Linux上でアセンブリを使って画面に画像を表示する方法は?
私はそれを探しましたが、私が得たすべての結果はDOSアセンブリ言語に関するものです。
私はLinuxアセンブリでゲームをしたいです。 Linuxカーネルのシステムコールを使って画面に画像を表示(または描画)する方法はありますか?Linux上でアセンブリを使って画面に画像を表示する方法は?
私はそれを探しましたが、私が得たすべての結果はDOSアセンブリ言語に関するものです。
これは可能ですが、最近ではアセンブリでソフトウェアを開発するには非常に退屈で遅い方法のようです。
.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とのやりとりはさらに複雑になるでしょう。
私は子供の頃、愛好家としてアセンブラで物を書きました。今私はそれをあまりにも遅く、ポータブルではないと考えています。確かにあなたのゲームはARMベースの電話でも実行したいですか?しかし、アセンブリは、あなたがx86とおそらくx86-64のためにそれを書いた後にプログラムを完全に書き換えない限り、本当にあなたにそれを与えません。
本当にアセンブラをしたいのであれば、Linux上のほとんどすべてがあるレベルまたは別のレベルでC APIを使用しているため、必要なさまざまなC-API関数を呼び出す方法を見つけるのが最大のハードルだと思います。それに対処するための最良の方法は何が必要ない小さなCプログラムを作成し、その後でそれをコンパイルすることはおそらくです:
gcc -S t.c
これはで、あなたは何をする必要があるかのようなもののためにあなたのアセンブラを与える必要がありますファイル名はt.s
です。
カーネル機能のみを使用する場合は、vesaフレームバッファー:Using the framebuffer device under Linuxを使用する必要があります。 Have fun =)
(Windows用)http://showmedo.com/videotutorials/video?name=3200020&fromSeriesID=320 – 0x90
+1ゲームでアセンブリをコーディングしようとしています。 :) –