Nie rozumiem, jak używać Interrupt 21, AH = 0ah

Moje informacje pochodzą ztutaj. Przypisanie prosi o program, który odczytuje nie więcej niż 20 znaków, konwertuje te znaki na wielkie litery, a następnie drukuje dane wejściowe jako wielkie litery.

Nie mam pojęcia, jak uzyskać dostęp do wejścia z int21 / AH = 0ah. Naprawdę nie mogę zadać bardziej precyzyjnego pytania, chyba że rozumiem, o czym jest mowa powyżej. Czy ktoś może wyjaśnić? Ponadto używam TASM, jeśli to robi różnicę. Testuję to także na freedosach.

AKTUALIZACJA1:

W porządku, dzięki twojej pomocy wierzę, że rozumiem, jak należy skonfigurować i zachować przerwanie.

Ustawiać: Muszę wyznaczyć ds: dx, w którym chcę, aby ten bufor istniał

Muszę ustawić ds: dx na 20 (ustawia maksymalną liczbę znaków, które bufor może pomieścić)

Muszę ustawić ds: dx + 1 na 0 (co, jak sądzę, w jakiś sposób ustawia minimalną liczbę znaków do wczytania)

Właściwie wywołaj int21 / AH = 0ah, który przejdzie do ds: dx i zinterpretuje ustawione bajty. Zatrzyma program podczas oczekiwania na dane wejściowe

int21 / AH = 0ah wypełni od ds: dx + 2 + n moim wejściem (gdzie n jest liczbą wprowadzanych znaków, w tym „r”)

Moje pytanie brzmi teraz, jak mam to zrobić. Jeszcze raz przejrzałem Reference Language Assembly x86, ale jeszcze nie znalazłem niczego pomocnego.

Kod, który mam do tej pory

           assume          cs:code,ds:code
code       segment
start:

           mov  ax,code ;moves code segment into reg AX
           mov  ds,ax   ;makes ds point to code segment

           mov  ah,0ah
           int  21h
           mov  ax,1234h  ;breakpoint

           mov  ah,9
           mov  dx,offset message
           int  21h

endNow:
           ;;;;;;;;;;ends program;;;;;;;;;;
           mov  ah,0  ;terminate program
           int  21h   ;program ends

message    db   'Hello world!!!',13,10,'
code       ends
           end  start

questionAnswers(3)

yourAnswerToTheQuestion