DOMANDA Domanda su assembly per 8086

Cioscos

Utente Attivo
926
95
CPU
AMD Ryzen 7 7800x3D
Dissipatore
DEEP COOL NEPTWIN White
Scheda Madre
GIGABYTE B650 GAMING X AX
HDD
1-2TB Seagate Barracuda 7200RPM - fanxiang S880 2TB PCIe 4.0 NVMe SSD M.2
RAM
CORSAIR VENGEANCE DDR5 32GB (2x16GB) 6400MHz CL36 CMH32GX5M2B6400C36W
GPU
MSI GeForce RTX 4080 Gaming X TRIO
Monitor
Samsung LS24AG30 1080p 144Hz
PSU
LC-POWER LC850P V3.0 850W 80+ Platinum
Case
NZXT H5 Flow
Periferiche
Logitech G502 (Mouse) - Tastiera Cooler Master SK653
Net
Openfiber 5Gbit/s
OS
Windows 11 Pro - 64bit
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.
 

Andretti60

Utente Èlite
6,440
5,091
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.
 
  • Mi piace
Reazioni: Cioscos
U

Utente 16812

Ospite
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:
 
  • Mi piace
Reazioni: Cioscos

Cioscos

Utente Attivo
926
95
CPU
AMD Ryzen 7 7800x3D
Dissipatore
DEEP COOL NEPTWIN White
Scheda Madre
GIGABYTE B650 GAMING X AX
HDD
1-2TB Seagate Barracuda 7200RPM - fanxiang S880 2TB PCIe 4.0 NVMe SSD M.2
RAM
CORSAIR VENGEANCE DDR5 32GB (2x16GB) 6400MHz CL36 CMH32GX5M2B6400C36W
GPU
MSI GeForce RTX 4080 Gaming X TRIO
Monitor
Samsung LS24AG30 1080p 144Hz
PSU
LC-POWER LC850P V3.0 850W 80+ Platinum
Case
NZXT H5 Flow
Periferiche
Logitech G502 (Mouse) - Tastiera Cooler Master SK653
Net
Openfiber 5Gbit/s
OS
Windows 11 Pro - 64bit
U

Utente 16812

Ospite
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:
 
  • Mi piace
Reazioni: Cioscos

Cioscos

Utente Attivo
926
95
CPU
AMD Ryzen 7 7800x3D
Dissipatore
DEEP COOL NEPTWIN White
Scheda Madre
GIGABYTE B650 GAMING X AX
HDD
1-2TB Seagate Barracuda 7200RPM - fanxiang S880 2TB PCIe 4.0 NVMe SSD M.2
RAM
CORSAIR VENGEANCE DDR5 32GB (2x16GB) 6400MHz CL36 CMH32GX5M2B6400C36W
GPU
MSI GeForce RTX 4080 Gaming X TRIO
Monitor
Samsung LS24AG30 1080p 144Hz
PSU
LC-POWER LC850P V3.0 850W 80+ Platinum
Case
NZXT H5 Flow
Periferiche
Logitech G502 (Mouse) - Tastiera Cooler Master SK653
Net
Openfiber 5Gbit/s
OS
Windows 11 Pro - 64bit

Cioscos

Utente Attivo
926
95
CPU
AMD Ryzen 7 7800x3D
Dissipatore
DEEP COOL NEPTWIN White
Scheda Madre
GIGABYTE B650 GAMING X AX
HDD
1-2TB Seagate Barracuda 7200RPM - fanxiang S880 2TB PCIe 4.0 NVMe SSD M.2
RAM
CORSAIR VENGEANCE DDR5 32GB (2x16GB) 6400MHz CL36 CMH32GX5M2B6400C36W
GPU
MSI GeForce RTX 4080 Gaming X TRIO
Monitor
Samsung LS24AG30 1080p 144Hz
PSU
LC-POWER LC850P V3.0 850W 80+ Platinum
Case
NZXT H5 Flow
Periferiche
Logitech G502 (Mouse) - Tastiera Cooler Master SK653
Net
Openfiber 5Gbit/s
OS
Windows 11 Pro - 64bit
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 '$'.
 
U

Utente 16812

Ospite
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) ;)
 
  • Mi piace
Reazioni: Cioscos

Cioscos

Utente Attivo
926
95
CPU
AMD Ryzen 7 7800x3D
Dissipatore
DEEP COOL NEPTWIN White
Scheda Madre
GIGABYTE B650 GAMING X AX
HDD
1-2TB Seagate Barracuda 7200RPM - fanxiang S880 2TB PCIe 4.0 NVMe SSD M.2
RAM
CORSAIR VENGEANCE DDR5 32GB (2x16GB) 6400MHz CL36 CMH32GX5M2B6400C36W
GPU
MSI GeForce RTX 4080 Gaming X TRIO
Monitor
Samsung LS24AG30 1080p 144Hz
PSU
LC-POWER LC850P V3.0 850W 80+ Platinum
Case
NZXT H5 Flow
Periferiche
Logitech G502 (Mouse) - Tastiera Cooler Master SK653
Net
Openfiber 5Gbit/s
OS
Windows 11 Pro - 64bit
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!
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili