Ясен хрен, у тебя addr какого типа?
Зачем тебе прерывания? Для чтения с stdin (почти то же самое) можно использовать getchar().
В своих старых паскалевских программах обнаружил следующее:
function ReadKeyWord : word; inline($b4/$10/$cd/$16);
function ReadState : word; inline($b4/$12/$cd/$16);
Если мне не изменяет память, то $b4 это mov al, а $cd это int. Т.е.:
asm
mov al, 10h
int 16h
; при этом в ax должен быть код клавиши
end
А вообще извини, давно на Си ничего не писал :(