首页 > 解决方案 > GCC ASM 从 C 将 AH 寄存器设置为 1h

问题描述

有没有办法把这条线从 GCC 的 C 推到 asm

    mov ah,1h
    int 21h

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

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

标签: cassemblygccx86inline-assembly

解决方案


1h表示1十六进制数。你可以用它$0x1来表达。($对于 GCC 汇编语言中的整数文字是必需的,并且0x将数字标记为十六进制)。

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

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

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

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

推荐阅读