组装中的多线程32位或16位



我们如何同时执行两项工作?

在显示连续程序时,应等待另一侧的按键事件。

我想为我的班级项目开发一个简单的游戏。在C 中,我使用了不同的线程作为输入事件的显示一个。

在连续显示某些内容时,如何获得按键值?

可以使用中断吗?如果是,那么我们如何使用它?INT

我正在使用MASM 32位或16位

int同步生成一个中断。这是您用于软件生成的中断。

您通过安装中断处理程序而"获得"中断,如果您的代码在环0中运行(即内核模式,这是16位实际模式正常的,但不在32位保护模式下)。

或(如Ped7g所说),您可以使用非阻止int 21hint 10h系统调用每次绘制循环进行一次轮询。


在完整的多任务操作系统下运行(例如Windows NT或更高版本,或Linux或OS X,但不是 dos)时,您的唯一选择是询问(使用系统调用)通知您的异步事件过程的操作系统。这基本上与汇编语言无关,因为您无法直接访问硬件,并且操作系统可以控制所有中断处理程序。即,您会以C在C中完全相同的方式进行操作,并且与同一系统调用相同的ARG。唯一的区别是您推动ECX/推送EBX/PUSH EAX/call foo/add esp, 12代替foo(a,b,c)

例如,您可以启动另一个线程,然后将其调用一个键入的系统调用(因此它会阻止),然后设置标志(您的主线程偶尔进行轮询),或者有等待的线程按键实际处理按键本身。

您还可以让键等线程向主线程发送某种信号,这几乎就像用户空间中的中断处理程序一样。除了信号是纯软件发明之外,通过使主线程执行其安装的信号处理程序功能来取决于OS来提供"信号"。(IDK如果Windows具有完全类似于Posix信号的内容,因此假设您使用MASM来开发Windows可执行文件,那么这可能不是中断主线程中无限循环的选择。)

也有可能执行异步I/O的其他方法,例如,在绘制每个帧后,请使用非障碍物系统调用键盘的主线程调查。

我在这里没有很多细节,但是您应该能够搜索我使用的一些短语并找到更多短语。对于一个特定的答案而言,这个问题太通用了,但这是操作系统机械来支持这种事情的方式。

最新更新