Oppure

Loading
19/05/09 15:25
vince92
Ciao a tutti, ho iniziato da poco a programmare in assembly ed c'è una cosa che non mi è chiara. Riguarda il modello di memoria tiny(ORG 100h) che ho notato che sul mio assembler(emu8086) se dichiaro le variabili all'inizio mi da errore. Ho visto negli esempi che ha che le variabili le dichiara sempre alla fine. Perchè?
aaa
19/05/09 18:20
theprogrammer
Cioe'? Perche' non puoi metterle all'inizio? (ovviamente subito dopo l'entry point)
aaa
19/05/09 18:22
manvb.net
Perchè la cpu esegue il codice dell'unico segmento dall'offset 100H.
Se dichiari le variabili subito dopo la cpu tenta di eseguile come se fossero codici macchina(e qui l'errore)!
Dichiarandole alla fine invece non saranno eseguite perchè il programma terminerà prima:

Ecco uno schemino

100H: Inizio lettura cpu
... Istruzioni
...
...
... Istruzione di fine programma
... Variabili

Tutto quello che sta tra inizio lettura cpu e fine programma viene eseguito (variabili comprese)
aaa
19/05/09 18:23
theprogrammer
Infatti, puoi inserirle subito dopo l'entry point ...

jmp start

... variabili ...

start
aaa
19/05/09 18:25
manvb.net
Postato originariamente da theprogrammer:

Infatti, puoi inserirle subito dopo l'entry point ...

jmp start

... variabili ...

start


Esatto, in questo modo la cpu salta le variabili.
aaa
19/05/09 18:32
vince92
Ah, credo di aver capito. Ho visto dei codici dove solo con dichiarazioni di variabili riuscivano a stampare una HelloWorld a schermo, il valore delle variabili era quello delle istruzioni?
aaa
19/05/09 18:42
manvb.net
Esatto: basta mettere i valori numerici(opcodes) delle istruzioni ed esse vengono eseguite.
Per la cpu tra codice e dati non c'è differenza.
aaa
19/05/09 18:49
vince92
mmm questa cosa mi ha incuriosito. Sai dove posso trovare una lista di istruzioni asm 8086 con indicato per ogni istruzione il codice operativo?
aaa