ciao ragazzi, vi spiego il problema...
devo fare un programma (assembly 80x86)che legga da tastiera dei nomi (lunghezza max 15 caratteri)
e li salvi in un array, per poi riutilizzarli per scorrere la lista, stamparli e fare altre cose..
il problema è dopo aver acquisito il nome, come copiarlo nell'array. vi riporto parte del codice,
sembra che qualcosa scriva nell'array, ma quando vado a stamparlo mi visualizza dei caratteri completamente diversi...
nell'esempio prendo solo 2 nomi... mi basterebbe che funzionasse questo
codice:dseg ... inserisci_nome DB CR,LF,LF,'INSERIRE UN NOME:$' ACCAPO DB 13,10,'$' nuovo_nome DB 18,0,16 DUP (00h) nuovo_nome2 DB 18,0,16 DUP (00h) nameArray DB 200 dup (?) ;array statico, max 200 nomi ... dseg (nuovo_utente viene chiamata dal main) NUOVO_UTENTE PROC NEAR MOV DX,OFFSET inserisci_nome ;stampo istruzioni CALL STAMPA_STRINGA ;la routine stampa_stringa mostra ;a video carattere per carattere la ;stringa LEA DX, nuovo_nome ;acquisizione della stringa da ;tastiera MOV AH, 0Ah INT 21h MOV DX,OFFSET ACCAPO ;stampa un accapo CALL STAMPA_STRINGA MOV DX,OFFSET inserisci_nome ;richiesta secondo nome CALL STAMPA_STRINGA LEA DX, nuovo_nome2 ;acquisizione il secondo nome MOV AH, 0Ah INT 21h MOV DX,OFFSET ACCAPO CALL STAMPA_STRINGA mov di, offset NameArray cld mov ax, ds mov es, ax mov bx, offset nuovo_nome mov ch, 00h MOV CL, [BX+1] ;all'offset 1 dovrebbe essere contenuta la lunghezza della stringa, la metto nel contatore mov si, [BX+2] ;all'offset 2 comincia la stringa rep movsw ;copia primo nome mov bx, offset nuovo_nome2 ;il reg DI dovrebbe essere aumentato in automatico dopo ogni operazione, quindi questa dovrebbe scrivere nell'indice successivo mov ch, 00h MOV CL, [BX+1] mov si, [BX+2] rep movsw ;copia secondo nome RET NUOVO_UTENTE ENDP

Rispondi quotando
