Вызывается int 16h с кодом ф-ии 0 (xor ax,ax это ax:=0). Это чтение символа с клавиатуры. Далее в ax оставляется только бладший байт (он же AL, AH очищается =0) (and ax, 0000000011111111b (=255)). В AL будет код символа. Умножается на 5 и прибавляется к смещению в начале строки с вычетом смещения для нажатия 1 (т.е. в случае нажатия 1 будет получено начальное смещение этой строки, при 2 - по идеи начальное смещение плюс 5 и т.д.). С учётом, что строка это соединённые 5 строк по 5 символов, а символ '$' сигнализирует конец вывода (для ф-ии 09 сервиса DOS), будет получен адрес строки с римским обозначением введённой цифры (по идеи). Далее она выводится ф-ией 9 прерывания int 21h.
Наподобие такого. В цикле до доставания нулевого символа (например)
str_len dd 0 ; текущая длина
...
str .rb 1024
...
mov edi, str
add edi, [str_len]
rep:
pop eax
test al, al
jz ext
mov [edi], al
inc edi
jmp rep
ext:
sub edi, str
mov [str_len], edi