Moje informacje pochodzą z here. Przypisanie prosi o program, który czyta nie więcej niż 20 znaków, zamienia te znaki na wielkie litery, a następnie wypisze dane wejściowe jako wielkie litery.Nie rozumiem, jak używać Przerwania 21, AH = 0ah
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, co jest połączone powyżej. Czy ktoś może wyjaśnić? Używam również TASM, jeśli to robi jakąkolwiek różnicę. Ponadto testuję to na freedos.
UPDATE1:
porządku, dzięki waszej pomocy, wierzę Rozumiem, jak wymaga przerwania należy ustawić się i zachowuje.
Setup: muszę wyznaczyć ds: dx gdzie chcę to bufor istnieć
muszę ustawić ds: dx do 20 (która określa maksymalną liczbę znaków bufor może pomieścić)
muszę ustawić ds: dx + 1 do 0 (co moim zdaniem jakoś ustawić numer min znaków czytać w)
Właściwie zadzwonić int21/AH = 0AH, która trafi do DS: DX interpretować ustawione bajty. Będzie zatrzymać program podczas oczekiwania na wejście
int21/AH = 0AH wypełni DS: DX + 2 + n z mojego wejścia (gdzie n oznacza numer wejścia znaków ze '\ r')
Moje pytanie brzmi teraz, jak to zrobić. Właśnie przejrzałem x86 Assembly Language Reference, ale jeszcze nie znalazłem nic przydatnego.
kod mam tak daleko
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
Wtedy zachowuje się jak int21/AH = 1h, który czyta się w jednym znaku. Wiem, że to przerwanie powoduje wpisanie postaci do rejestru AL. Jak mógłbym określić, gdzie będzie bufor postaci? –
Ponadto, właśnie zdałem sobie sprawę. Tabela przesunięć oznacza, że rzeczywiste dane znakowe zaczynają się od dwóch bitów lub bajtów (prawdopodobnie bajtów) z dala od miejsca, w którym dane zwrotne istnieją w pamięci. Myśli? –
Tak, rzeczywiste wejście zaczyna się od DS: DX + 2. Jednak ten plik ignoruje to wejście i używa tylko tej funkcji do wstrzymania wykonywania. –