gpt4 book ai didi

c++ - getch 相当于汇编语言

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:34 26 4
gpt4 key购买 nike

我在汇编语言中编程,在 C++ 中使用 x86,我需要知道汇编语言中的 getch 等价物而不是 C++ 语言,因为我不想使用 C++ 编程语言中的任何函数。

我在网上找到了代码,但它将给定值保存到一个变量中,并在 C++ 中创建。我只想使用该功能来停止程序,直到按下任何键。我不必在进一步的编程中使用输入的键值。

最佳答案

这是一个特定于操作系统的问题。例如,如果您使用的是 Linux,则可以像这样发出 read 系统调用:

; Allocate some stack buffer...
sub esp, 256

mov eax, 3 ; 3 = __NR_read from <linux/asm/unistd.h>
mov ebx, 0 ; File descriptor (0 for stdin)
mov ecx, esp ; Buffer
mov edx, 256 ; Length

int 80h ; Execute syscall.

这实际上是在 x86 Linux 上发出系统调用的更过时的方法,但这是我脑海中浮现的一种方法。还有更快的 sysenter。并且有一个共享库映射到每个进程,它根据您的硬件支持抽象系统调用接口(interface)。 (linux-gate.so。)

作为一个品味问题,我会反对从汇编语言进行系统调用的方法。从 C 中实现它要简单得多。调用汇编代码(或生成内联汇编)以获取绝对需要以汇编语言编写的内容。但总的来说,对于大多数实际问题,您会发现最好不要浪费时间在汇编中与操作系统接口(interface)交谈。 (除非这是一个学习练习,在这种情况下我完全赞成。)

更新:您在对@Anders K. 的评论中提到您正在写一些东西放在 MBR 上。您应该在问题的前面提到这一点。一种方法是使用 BIOS 调用:我相信您想要的是 int 16h with ah=0。另一种方法是安装键盘中断处理程序。 BIOS 调用如下所示:

xor ah, ah    ; ah = 0
int 16h ; call BIOS function 16h

; al now contains an ASCII code.
; ah now contians the raw scancode.

关于c++ - getch 相当于汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547506/

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