Cosa significa `dup (?)` media in TASM?

Ho questo codice, ma sono familiarità con la sintassi.

STACK16_SIZE    =       100h
stack16         db      STACK16_SIZE dup (?)

Penso dup significa dichiariamo una variabile di tipo array, in quanto questa è una pila, ma non ne sono sicuro. Così che cosa dup media in TASM, esattamente?

InformationsquelleAutor sashoalm | 2013-04-11

 

2 Replies
  1. 19

    STACK16_SIZE dup (?) modo di duplicare i dati in parentesi da STACK16_SIZE volte. È equivalente a scrivere ?, ?, ?, ?, … (100h volte)

    I dati in parentesi è “i dati non inizializzati”. Che è, viene allocata la memoria, ma non a nessuna particolare valore di carico.

    Assemblea non fornisce una matrice “tipo”. Se lo fa, è solo per il debugger per l’uso durante l’ispezione di dati. Tuttavia, in questo frammento di codice, stack16 è un simbolo con un indirizzo di inizio di un blocco di memoria di byte che è contro-intuitivo e potenzialmente fonte di una sottile bug. Per una CPU stack, si dovrebbe davvero essere definito come 16 bit parole (dw) o 32 bit di parole (dd).

    • Ma che tipo è stack16? Vengo da C in background, quindi stavo pensando in termini di matrici. O è come un segnaposto per un indirizzo di memoria? I. e. tutte le variabili di TASM sono come void* e può puntare a qualsiasi tipo di dati. Così qui stack16 punta al primo elemento di un array di 100 byte. È corretto?
    • Non importa, ho trovato una buona spiegazione a csi.ucd.ie/staff/jcarthy/home/alp/alp5.html
    • ARR1 DB 5 DUP(2) cosa credi che questa espressione ? che cosa è un valore all’interno di un array ?
    • Che 5 dup(2) produce 5 elementi, ciascuno del valore di 2. Poiché si tratta di un arg a db, la dimensione dell’elemento è di 1 byte.
    • E BTW, “non inizializzato” non significa casuale / valore dell’immondizia. Al di sotto di Sistemi operativi come Windows, la memoria nel BSS è inizializzata a zero, e MSVC emetterà asm come foo db 100 dup(?) per C come static foo[100] = {0};, perché dup(?) non garantisce valori pari a zero per tutti gli elementi. (Ma questi byte non sono memorizzate all’interno del file eseguibile, a inizio / durata per l’intero segmento BSS. IDK se Windows chiama un BSS; che Linux / Unix terminologia, ma la stessa idea).
  2. 7

    ? significa che non ha un valore particolare, non inizializzata. DUP significa duplicare.

    Così che si ottiene 100h byte che non sono inizializzate.

Lascia un commento