почему при написании строки mov a, al программа перестаёт компилироваться? Как это исправить?
Я так полагаю что потому, что переменная 'a' объявлена как слово:
a dw 30 ; test
а регистр 'al' байтовый. Опять полагаю (про то какую конкретно ошибку выдаёт транслятор сказано не было) что если переменную 'a' объявить как байт то ошибка должна пропасть:
a db 30 ; test
по какой таблице смотреть коды клавиш
Например
тут, но вообще много где.
и откуда взялся код 27d (с данным кодом работает)?
Потому что у клавиши ESC код ASCII как раз 27. А скан код к неё же 1, скан код после выполнения функции 00h прерывания 16h возвращается в регистре 'ah', а ASCII код в 'al'.