如何将此汇编代码编写为内联汇编?编译器:gcc(i586-elf-gcc)。 GAS 语法让我很困惑。 请告诉我如何将其编写为适用于 gcc 的内联程序集。
.set_video_mode:
mov ah,00h
mov al,13h
int 10h
.init_mouse:
mov ax,0
int 33h
我在组装时也有类似的。我将它们单独编写为汇编例程,以便从我的 C 程序中调用它们。我需要从 C 本身调用这些中断和更多中断。
此外,我需要根据我正在调用的中断例程将一些值放入某些寄存器中。请告诉我该怎么做。
我想做的就是从 C 调用中断例程。使用 int86() 对我来说也可以,但我没有该函数的源代码。 我想要 int86(),这样我就可以从 C 调用中断。
我正在开发自己的微型操作系统,因此我对调用中断或任何直接硬件访问没有任何限制。
最佳答案
我还没有测试过这个,但它应该可以帮助你开始:
void set_video_mode (int x, int y) {
register int ah asm ("ah") = x;
register int al asm ("al") = y;
asm volatile ("int $0x10"
: /* no outputs */
: /* no inputs */
: /* clobbers */ "ah", "al");
}
我已经输入了两个“clobbers”作为示例,但是您需要设置正确的 clobbers 列表,以便编译器知道您已经覆盖了寄存器值(可能没有)。
关于gcc - 将Intel风格的汇编代码重写为GCC内联汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893931/