Ясен хрен, у тебя 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
 
 
А вообще извини, давно на Си ничего не писал :(