You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MASM x64程序调用INT 16h报错:0xC0000005访问违例

x64平台MASM程序调用INT 16h崩溃问题

错误信息

Exception thrown at 0x00007FF73D0D176F in AssemblyGame.exe:
0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

出错代码片段

_GameLoop PROC
    call _GameInput

    mov rax, 0h
    ret
_GameLoop ENDP

_GameInput PROC
    ; Check if any key is being pressed
    mov ah, 01h
    int 16h  ;; <--- 错误触发位置
    call DebugPrint
    jz NO_KEY_PRESSED
    
    ; Check which key is being pressed (AL contains ascii character)
    mov ah, 00h
    mov ah, 00h
    int 16h

    ; Check W key
    cmp al, 77h     ; Lowercase w
    je W_KEY_PRESSED

    cmp al, 57h     ; Uppercase W
    je W_KEY_PRESSED
...

问题原因

INT 16h是MS-DOS时代的BIOS中断,用于获取键盘输入,但现代64位Windows完全不支持这类中断调用。在x64模式下执行INT指令会直接触发内存访问违规,导致程序崩溃。

替代方案

在64位Windows平台下,需使用Windows原生API处理键盘输入,推荐两种实用方式:

  • GetAsyncKeyState函数:适合游戏实时输入检测,可直接获取指定按键的按下/释放状态,示例代码:
    ; 检测W键是否按下
    mov rcx, 57h        ; W键的虚拟键码
    call GetAsyncKeyState
    test eax, 8000h     ; 检查返回值最高位(1表示按键按下)
    jnz W_KEY_PRESSED
    
    需提前在程序中导入user32.dll中的GetAsyncKeyState函数。
  • ReadConsoleInput函数:适用于控制台程序,可捕获包括按键、鼠标在内的详细输入事件。

内容的提问来源于stack exchange,提问作者Joshnaks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:00:01