gpt4 book ai didi

c - 用于 getchar 的汇编内联 C,不带 echo

转载 作者:行者123 更新时间:2023-11-30 15:53:43 25 4
gpt4 key购买 nike

我正在尝试将 C 中的汇编内联代码与 gcc 一起使用,以使用带有 ah = 07h 的中断 21 来生成没有 echo 的 getchar。这是我的代码(主要):

...
int main(int argc, char *argv[])
{
int t, x, y;
char input;
asm(
"movb $0x01, %%ah\n\t"
"int $0x21\n\t"
"movb %%al, %0"
: "=r" (input)
);
printf("Character: %c\n", input);
return 0;
}
...

但是不行,编译成功但是什么也没做。

最佳答案

首先,您将 AT&T 语法与 DOS int 混合在一起。所以这里是每个平台的答案:

1. DOS: http://msdn.microsoft.com/en-us/library/5f7adz6y(v=vs.71).aspx

__asm mov ah,01
__asm int 21

现在al包含读取的字节。如 here 中所述.

如果你想通过alchar input使用堆栈指针的右侧偏移量 esp - <the offset>到达input的地址并通过调用 mov byte [esp-offset], al 将其设置为读取值。

2. LINUX :

编写程序集的方式是 AT&T样式请检查this出来。

static inline
unsigned read_cr0( void )
{
unsigned val;
asm volatile( "mov %%cr0, %0"
: "=r"(val) );
return val;
}

关于c - 用于 getchar 的汇编内联 C,不带 echo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534761/

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