Wczytanie znaku z klawiatury do zmiennej.

0

Witam mam zadanie wczytać znak z klawiatury i przechować go w pamięci + omówienie tego, czym różni się [etykieta] od etykieta.

Zrobiłem to tak, że zbieram znak poprzez 16h do AL i z AL wrzucam do [zmiennej]. Jest to dobrze podejście?

Rozumiem, że [etykieta] zwraca wartość danej zmiennej(wartość znajdująca się pod tym adresem) a etykieta(bez []) to adres zmiennej?

org 100h

mov ah, 00h
int 16h

mov [znak], al

mov ah, 0eh	
mov dl, znak
int 10h
	
	
mov ax, [koniecProgramu]
int 21h

koniecProgramu: dw 4c00h
znak db 0
0

Potwierdzam, że [] to tak jakby operator dereferencji * z C/C++, więc odwołanie się do pamięci pod pewnym adresem.

0

No faktycznie.

Ale czemu działa [zmienna] i zmienna do DX przy wypisywaniu np. stringu?

Oraz wczytałem tekst za pomocą int 21h buffered string input.
Zrobiłem tak:

Text: 
db 255
db 0
times 255 db 0

Bo z dokumentacji jest. Offset: 0 - liczba max znaków(255), 1 - liczba pobranych znaków, 2 - n pobranych znaków.

to pobrałem do zmiennej i próbuje wypisać:

mov ah, 09h
mov dx, [zmienna + 2]
int 21h

I wypisują się jakieś krzaki, czyli brakuje "$" na końcu.

Jak dodać na koniec lub za ostatnim znakiem "$"?
Próbowałem tak:

mov [zmienna + 255], "$"
; lub
mov zmienna + 255, "$"
; lub
mov al, [zmienna + 1] ; liczba znaków
mov [zmienna + al], "$" ; też nie działa zawsze wywala krzaki albo błąd assemblacji przy próbie nr 2. 

1 użytkowników online, w tym zalogowanych: 0, gości: 1