gpt4 book ai didi

gcc - 将Intel风格的汇编代码重写为GCC内联汇编

转载 作者:行者123 更新时间:2023-12-03 02:03:10 25 4
gpt4 key购买 nike

如何将此汇编代码编写为内联汇编?编译器: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com