DOMANDA Domanda su assembly per 8086

Pubblicità

Cioscos

Utente Attivo
Messaggi
926
Reazioni
95
Punteggio
59
Salve! Programmando a livello universitario in Assembly mi è venuto un dubbio.
Vedendo degli esempi sulle slide mostrateci in UNi ho notato che quando dobbiamo dichiarare un array per memorizzare caratteri lo inizializziamo, ad esempio, in questo modo: array db ?,?, 20 dup ('$') ma credo proprio che questa procedura formale non sia necessaria. Confermate? Grazie in anticipo per la risposta.
 
L'istruzione

Codice:
db N dup('a')

Significa allocare N bytes duplicando il valore in parentesi, in questo caso il carattere 'a'

Non capisco quale sia la parte che dici non sia necessaria.
 
Salve! Programmando a livello universitario in Assembly mi è venuto un dubbio.
Vedendo degli esempi sulle slide mostrateci in UNi ho notato che quando dobbiamo dichiarare un array per memorizzare caratteri lo inizializziamo, ad esempio, in questo modo: array db ?,?, 20 dup ('$') ma credo proprio che questa procedura formale non sia necessaria. Confermate? Grazie in anticipo per la risposta.

In che senso si tratta di una procedura non necessaria ? :look:
 
Rispondendo ad entrambi. Lo so cosa serve il DUP. Non so perché dovrei riempire il vettore di $

Inviato da SM-G925F tramite App ufficiale di Tom\\\'s Hardware Italia Forum

Se non desideri inizializzare gli elementi del vettore puoi usare il punto di domanda, al posto del valore, per riservare soltanto lo spazio (1 byte per ciascun elemento), cioè:

nome-array DB numero-elementi DUP (?)

Ciao, a presto :sisi:
 
Se non desideri inizializzare gli elementi del vettore puoi usare il punto di domanda, al posto del valore, per riservare soltanto lo spazio (1 byte per ciascun elemento), cioè:

nome-array DB numero-elementi DUP (?)

Ciao, a presto :sisi:
Allora ad esempio ho una variabile così dichiarata: buf DB MAX+1, ?, MAX+1 DUP('$') dove max è una costante dichiarata così: max equ 20.
Ora apparte l'inutilità di fare questa cosa del max a mio parere perché basta fare: buf DB ?,?,21 DUP ('$') .. non capisco perché dovrei riempire il vettore che in futuro conterrà caratteri di '$'.
 
Allora ad esempio ho una variabile così dichiarata: buf DB MAX+1, ?, MAX+1 DUP('$') dove max è una costante dichiarata così: max equ 20.
Ora apparte l'inutilità di fare questa cosa del max a mio parere perché basta fare: buf DB ?,?,21 DUP ('$') .. non capisco perché dovrei riempire il vettore che in futuro conterrà caratteri di '$'.

Non necessariamente l'espressione deve essere DUPlicata, può essere una costante o una stringa di caratteri, un punto di domanda, come ho illustrato sopra, o un indirizzo (solo con DW 16-bit e DD 32-bit) ;)
 
Non necessariamente l'espressione deve essere DUPlicata, può essere una costante o una stringa di caratteri, un punto di domanda, come ho illustrato sopra, o un indirizzo (solo con DW 16-bit e DD 32-bit) ;)
Ok grazie per la risposta. Ora ho un'altra domanda.
Ho creato un programma per fare una calcolatrice. Il programma funziona ma ho un dubbio.
Io creo una variabile per far mostrare a schermo il risultato in ascii dichiarandola in questo modo: ris_ascii db ?,?, 10,13,'$'
Poi nel corpo del codice per assegnare ad una determinata posizione della variabile il numero in ascii faccio così:

add al,30h
mov ris_ascii,al

add ah,30h
mov ris_ascii+1,ah

Il tutto funziona a dovere ma in un'esercitazione la prof ci fornì un .txt con la soluzione di un esercizio e lei oltre a dichiarere una variabile in questo modo:

max equ 20
buf DB MAX+1, ?, MAX+1 DUP('$')

quando doveva far visualizzare la stringa richiamava una macro (e fino qui nessun problema) e specificava il +2:

stampa_stringa buf+2

Andando su internet e poi rivedendo le slide, ho scoperto questa cosa riguardo l'interrupt 0Ah:
Offset Size Description
00 1 maximum characters buffer can hold
01 1 number of chars from last input which may be recalled OR number of characters actually read, excluding CR
02 n actual characters read, including the final carriage return

Il +2 serve per non far leggere la posizione 00 e 01.

Quello che non capisco però è il motivo per il quale nel mio programma calcolatrice quando stampo la variabile ris_ascii non c'è bisogno di aggiungere il +2.
Sarà perché ho dichiarato la variabile in questo modo?..: ris_ascii db ?,?, 10,13,'$'

Grazie in anticipo per la risposta!
 
Pubblicità
Pubblicità
Indietro
Top