Ассемблер (Irvine)- макрос, который ожидает нажатия клавиши и возвращает нажатую клавишу

Макрос, который ожидает нажатия клавиши и возвращает нажатую клавишу. Макрос должен включать параметры для кода ASCII и кода сканирования клавиатуры.

У меня есть следующий код, но я получаю две ошибки. Ниже приведены ошибки с моим исходным кодом.

Ошибки:

ошибка A2006: неопределенное syV

ошибка MSB3721: команда "ml.exe /c /nologo /Zi /Fo"Debug\ch10_01.obj" /Fl"zprob1.lst" /I "c:\Irvine" /W3 /errorReport:prompt /Ta"....\ASM Solutions\ch10\ch10_01.asm"" завершен с кодом 1

Исходный код:

 INCLUDE Irvine16.inc
ASSUME DS:_DATA

mReadkey MACRO ascii, scan
    mov ah,10h      ; BIOS keyboard input function
    int 16h
    mov scan,ah
    mov ascii,al
ENDM

.data
ascii BYTE ?
scan  BYTE ?
str1  BYTE "ASCII code: ",0
str2  BYTE "Scan code:  ",0

.code
main PROC
mov ax,@data
mov ds,ax

; Wait for a key; when the macro returns, the two arguments
; contain the ASCII code and scan code of the key.
mReadkey ascii, scan

; Display the values.
    mov edx,OFFSET str1
    call WriteString
    movzx eax,ascii
    call WriteHex
    call Crlf

    mov edx,OFFSET str2
    call WriteString
    movzx eax,scan
    call WriteHex
    call Crlf

    exit
main ENDP
END main

1 ответ

Решение

Вы пытались скомпилировать 16-битный код реального режима в 32-битный исполняемый файл защищенного режима. Это не сработает. Добавить /omf в командной строке ml.exe и убедитесь, что link16.exe будет использоваться в качестве компоновщика.

Другие вопросы по тегам