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