L.E. Shock.spunemi si mie exista vreo "procedura" prin care se citeste o variabila de la tastatura ? ( ca read in pascal, daca intelegi )
Cum zicea si DarkByte, ceva procedura nu e, dar poti sa faci altcumva. O varianta ar fi urmatoarea:
[folositi TASM pentru compilare]
DOSSEG
.MODEL SMALL
.STACK 30h
.DATA
buffer db "String-ul e: "
;spatiile din buffer [49] se vor umple cu caracterele introduse la tastatura, iar la sfarsitul bufferului [al 50-lea spatiu] caracterul $ care semnifica sfarsitul string-ului
.CODE
START:
mov bx,13 ;sa inceapa umplerea bufferului imediat dupa "String-ul e:"
mov ax,seg buffer
mov ds,ax
loopu:
mov ah,0h
int 16h ;citeste caracter de la tasta
cmp al, 8 ;e backspace?
je rem ;daca da, sari la "rem"
mov dl,al
mov ah,2
int 21h ;tipareste si pe ecran caracterul introdus
mov [ds:buffer+bx], al ;scrie caracterul citit de la tastatura in buffer [bx e pozitia caracterului citit]
inc bl ;mareste pozitia cu 1
cmp bl, 63
jge gata ;a ajuns bl la 63? adica 13+50 caractere? daca da atunci am umplut bufferul, sarim la tiparirea string-ului
cmp al, 0dh ;a apasat enter?
jne loopu ;daca nu, mergi inapoi la "loopu", reia totul de la citirea caracterului
gata:
mov ax,seg buffer
mov ds,ax
mov [ds:buffer+bx], '$' ;adauga caracterul "$" la sfarsitul stringului, sa stie unde se termina stringul
mov dx,offset buffer
mov ah,9
int 21h ;tipareste string-ul
mov ax,4c00h
int 21h ;iesi din program
rem: ;se ajunge aici doar cand e apasat backspace
mov [ds:buffer+bx], '$' ;inlocuieste ultimul caracter cu $, care semnifica ca inainte de ultimul caracter se termina string-ul
cmp bx,13
jbe loopu ;bx <= 13? Daca da, atunci am ajuns la inceputul string-ului, sari la "loopu"
dec bx ;daca nu, atunci scade BX cu 1, ca sa se evidentieze ca a fost sters ultimul caracter
;sa mutam si cursorul cu un spatiu mai inapoi
mov dh,0 ;randul 0
mov dl,bl ;coloana dl
sub dl,12 ;scadem din dl pe 12 [lungimea string-ului "String-ul e:"]
mov ah,02h ;functia de mutare a cursorului
xor bh,bh ;in bh se specifica "video page", noi il facem 0
int 10h ;apeleaza functia de mutare a cursorului a INTterrupt-ului 10h [functia 02h, din AH]
mov dl,' '
mov ah,2
int 21h ;tipareste un spatiu acolo unde e cursorul ca sa se stearga ultimul caracter de pe ecran
;acum cursorul iar este unde a fost inainte, ca am tiparit spatiul, deci il mutam inca o data inapoi
mov dh,0
mov dl,bl
sub dl,12
mov ah,02h
xor bh,bh
int 10h
mov [ds:buffer+bx], '$' ;in buffer scriem $ la offsetul buffer+bx, adica in locul ultimului caracter [il stergem]
jmp loopu ;sari la "loopu"
END START
Download EXENelamuriri?