要发送一个字符,我们可以使用SendInput。如何使用它发送多个字符?
我尝试了这段代码,但没有发送任何内容:
INPUT in;
in.type=INPUT_KEYBOARD;
in.ki.wScan=0;
in.ki.time=0;
in.ki.dwExtraInfo=0;
in.ki.wVk=0x53+0x54;
SendInput(2,&in,sizeof(INPUT));
Run Code Online (Sandbox Code Playgroud)
那么,正确的方法是什么?
我正在编写一个 8086 汇编器,它接受指令并生成 8086 机器代码。我使用《Intel 8086 用户手册》作为参考。
为了说清楚,我将解释一下情况。假设我想汇编这条指令mov ax, bx。我查手册发现,当 的操作数mov是 2 个 16bit 寄存器时,操作码mov是0x89和 来指定操作数(源和目的),mov在这种情况下,后面跟着一个 ModRegRm 字节,指定源以及目的地,在本例中为0xd8。二进制中的该字节 = 11011000.
Mod为2位,Reg、Rm各为3位。所以,Mod = 11,Reg = 011,Rm = 000。这里很简单,但有一些我不明白的地方,那就是寻址模式和位移。
查看表格和以下三个指令及其机器代码。
mov [bx+0x6], ax ;894706
mov [bx+0xbf],ax ;8987BF00
mov [bx+0xffff],ax ;8947FF
我假设每条指令的位移长度分别为8位、8位、16位,这是否错误?
我认为我是对的,因为它很明显,0x6分别0xbf是 1 字节和0xffff2 字节。
问题是,为什么第二条指令中的MOD字段是10b or 0x02而不是01b or 0x01?应该是0x01因为位移是8bit位移吧?为什么位移量是 16 位,MOD 却0x01在第三条指令中?为什么汇编器忽略其余的位移并仅捕获 1 个字节?