Не удается вызвать прерывания из C / Asm

#c #windows #assembly #x86 #nasm

# #c #Windows #сборка #x86 #nasm

Вопрос:

Итак, я пытаюсь создать функцию asm, которую я могу запускать на C, но каждый раз, когда я использую прерывание, оно выдает следующую ошибку: Исключение, вызванное 0x00541735 в Project1.exe : 0xC0000005: местоположение чтения с нарушением доступа 0xFFFFFFFF. Я пытался возвращать значения из функций asm без использования прерываний, просто чтобы проверить, была ли проблема в самой функции asm, но это сработало, поэтому я застрял. Прерывания, похоже, единственная проблема. Вот мой код

 global _getkey

section .data

section .text

_getkey:
    push ebp
    mov ebp, esp
    mov ah, 01
    int 22
    mov eax, 16
    mov esp, ebp
    pop ebp
    ret
 

Я использую Microsoft Visual Studio 2019 для запуска этого, а также NASM. Я на Windows 10.

Комментарии:

1. Вы не можете использовать int 22 в Windows. Вместо этого вызовите соответствующие функции API ОС.

2. В этом случае, если вам разрешено вызывать версию библиотеки C для Windows, вы можете выполнить вызов _kbhit , чтобы получить ключ.