如何在Linux上使用汇编在屏幕上显示图片?

我想在Linux程序集中制作游戏。 有没有办法通过Linux内核系统调用在屏幕上显示(或绘制)图片?

我search了它,但是我得到的所有结果都是关于DOS汇编语言的。

这是可能的,但是现在似乎是一个令人难以置信的繁琐而缓慢的组装软件的方式。

假设你在i386平台上运行(每个平台的系统调用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 

这假设所有的系统调用参数,以及系统调用号码已经加载到堆栈上。

你可以在Linux内核的include / asm-generic / unistd.h文件中找到系统调用号码。

现在您已经知道如何从程序集中调用系统调用,您仍然需要知道当然要调用哪个系统调用。 我建议阅读Linux Framebuffer 。 与X交互将变得更加复杂。

如果只想使用内核函数,则必须使用vesa framebuffer: 在Linux下使用framebuffer设备 。 玩得开心=)

我小时候就习惯用汇编语言来写东西。 现在,我认为它太慢,不可移植 – 当然,你希望你的游戏也可以在基于ARM的手机上运行? 但是程序集并没有真正的给你,除非你在为x86或者x86-64编写程序之后完全重写程序。

如果你真的想做汇编程序,你可能会发现你最大的障碍就是搞清楚如何调用所需的各种C-API函数,因为几乎Linux上的所有东西都在一个层面上使用C API。 处理这个问题的最好办法可能是写一个很小的C程序来完成你所需要的,然后编译它:

 gcc -S tc 

这应该给你一个类似于你需要做的东西的汇编程序,在一个名为ts的文件中。