【发布时间】:2017-03-12 19:47:11
【问题描述】:
目前我遇到了一些问题,我不确定这是否是我的程序的问题,但这是我不是 100% 关心的一件事,所以我将使用它作为一个学习机会。
我有这个指令:in al, 0x60 从键盘读取扫描码。
我正在尝试将此扫描码发送到用 C 编写的函数。C 函数声明如下所示:void cFunction(unsigned int scancode)。
所以基本上,这就是我正在做的事情:
in al, 0x60
movzx EAX, AL
push EAX
call Cfunction
目标是在 C 函数中获取这样的值:0x10,这意味着 Q 被按下,0x11 W 被按下,0x12 是 E,等等……
问题:
- 我所做的是否将正确的值传递给函数?
- 如果我只推送
AX而不是EAX,结果会不会有所不同? - 我只需要byte
AL,但显然我不能pushAL,所以我一直将它归零到EAX。那么,假设如果按下 Q 并且我将其比较为:if(scancode == 0x10),那么无论EAX与AX被按下,这是否会正确解释?还是我只需要将AL的值放入扫描码?如果没有,我该如何让AL加入该函数?
【问题讨论】:
-
你不想
push ax(如果你的汇编程序甚至允许的话)因为你通常需要推送 4 个字节,在这种情况下,C 函数无论如何都需要一个 4 字节的 unsigned int .你做的是正确的。 -
如果您有现代操作系统或使用 USB 键盘,这将不起作用。
-
您将 AL 扩展到 EAX 是零,因此值得 RAX = EAX = AX = AL = 扫描码。
-
@Olaf 我正在创建一个操作系统
-
@Jester 谢谢你,我会在别处寻找问题。我很感激你们所有的时间。
标签: c assembly x86 masm x86-16