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