c - GCC ASM 将 AH 寄存器从 C 设置为 1h

标签 c assembly gcc x86 inline-assembly

有没有办法将这一行从 GCC 的 C 推送到 asm

    mov ah,1h
    int 21h

我找不到将 AH 寄存器设置为 1h 的方法

 asm("mov %ah,1h");
 asm("int 21h");

最佳答案

1h 表示十六进制数中的 1。您可以使用 $0x1 来表达。 (GCC 汇编语言中的整数文字需要 $,而 0x 将数字标记为十六进制)。

另请注意,在 GCC 汇编语言中,mov 指令(以及其他具有两个操作数的指令)的目标应该是第二个操作数。

asm("mov $0x1, %ah");
asm("int $0x21");

还有一点需要注意的是,如果您想在执行 int 时确保 %ah0x1,这两行应该放入一个 asm 语句中,不要让编译器在它们之间放置其他指令。

asm(
    "mov $0x1, %ah\n\t"
    "int $0x21"
);

关于c - GCC ASM 将 AH 寄存器从 C 设置为 1h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65545954/

相关文章:

objective-c - 在这种情况下使用 CFMutableArrayRef 是否更明智?

assembly - rip 可以与具有 RIP 相对寻址的另一个寄存器一起使用吗?

c - 通过指向指针参数的指针进行分配

c++ - 使用 -D_GLIBCXX_USE_CXX11_ABI=0 构建 boost

c - 如何在c中表示键(enter,shift,alt,space等)

python - 将 OpenGL 模型导出为 .OBJ

assembly - MIPS 已保存且临时

debugging - 调试器如何跟踪 C 代码和汇编指令之间的映射?

c++ - std::variant 在 gcc 8 和 9 中需要默认构造函数,而在 gcc 10/clang 中不需要

c - 内核开发 : Setting ES:DI in real mode