汇编语言中的getch等价物 我在汇编语言中用x86语言编写C++语言,我需要用汇编语言来代替GCH等价的语言,而不是C++语言,因为我不想用C++函数编写任何函数。p> 我在Web上找到了代码,但是它将给定的值保存到变量中,并用C++创建。我只想使用该功能在按下任何键之前停止程序。我不必在进一步的编程中使用输入的键值。

汇编语言中的getch等价物 我在汇编语言中用x86语言编写C++语言,我需要用汇编语言来代替GCH等价的语言,而不是C++语言,因为我不想用C++函数编写任何函数。p> 我在Web上找到了代码,但是它将给定的值保存到变量中,并用C++创建。我只想使用该功能在按下任何键之前停止程序。我不必在进一步的编程中使用输入的键值。,c++,c,assembly,C++,C,Assembly,这可能不是你正在寻找的,但是为什么不在编译C++代码后只看汇编列表呢?大多数编译器都有asm输出作为选项。实际上没有这样的选项`“getch”只是标准C RTL的一部分;它是库中围绕一个或多个系统调用的一些C代码,具体取决于您运行的系统。没有处理器指令定义为“从用户键入的任何位置读取字符”。您可以从汇编中学习调用CRTL例程,也可以研究相应的系统调用并学习调用它们。这是一个特定于操作系统的问题。例如,如果您正在使用Linux,您可以发出如下read系统调用: ; Allocate some st

这可能不是你正在寻找的,但是为什么不在编译C++代码后只看汇编列表呢?大多数编译器都有asm输出作为选项。

实际上没有这样的选项`“getch”只是标准C RTL的一部分;它是库中围绕一个或多个系统调用的一些C代码,具体取决于您运行的系统。没有处理器指令定义为“从用户键入的任何位置读取字符”。您可以从汇编中学习调用CRTL例程,也可以研究相应的系统调用并学习调用它们。

这是一个特定于操作系统的问题。例如,如果您正在使用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.

看看你之前的问题,我假设这是为你的引导加载程序。在这种情况下,您没有任何可用的操作系统调用,因此必须依赖BIOS。特别是,可用于访问IBM兼容PC上的基本BIOS键盘服务。

对于引导加载程序,不应使用getch之类的调用。如果您需要一次处理一个缓冲区一个字符,那么就编写一个循环,一次一个字节,逐步完成。如果您必须与控制台交互,那么编写一个C++控制台程序,在调试器中逐步通过它,并查看运行库中执行的代码。它可能是一条中断指令,并且可能在中断指令之前设置了参数。在PC上,中断将调用BIOS来执行实际的控制台IO。

您的程序需要在什么操作系统下工作?您使用的是什么汇编程序?在DOS/引导加载程序代码中,您可以使用我必须将代码写入mbr。所以它必须小于466字节。我认为在汇编中编程可以最大限度地减少尺寸光。。。我用它作为引导加载程序。我只在按下键之前停止程序
xor ah, ah    ; ah = 0
int 16h       ; call BIOS function 16h

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