Condividi:        

ASSEMBLER 8086 parte teorica

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

ASSEMBLER 8086 parte teorica

Postdi stex » 08/04/09 13:39

Vorrei farvi alcune domande relative all'assembler 8086:
1) Come faccio a sapere i modi di indirizzamento delle seguenti istruzioni?
per esempio:
CMP FOO[DI+25], DH
JMP TABLE[SI]
MOV BAR[BX], 1642
ADD AL,76
POP [DI]

Non riesco a capire quale operando devo prendere in considerazione per il modo di indirizzamento. Nella guida assembler 8086 vedo che mi prende di riferimento l'operando sorgente e mi dice il tipo di indirizzamento (http://www.scribd.com/doc/4596052/Memor ... andi-ISA16) però mi prende come destinazione sempre un registro (AX) invece nei casi che ho scritto io come faccio? Ci sono 2 indirizzamenti? Mi potete spiegare come faccio a capirlo.

2) Poi dovrei calcolare il numero di cicli di bus per il fetch e per l'esecuzione supponendo di essere nell'8086 quindi bus dati a 16 bit e bus indirizzi a 20 bit. Se prendo l'istruzione MOV BAR[BX],1642 secondo me occupa 6 byte perchè 2 byte per Opcode e W,D mod, reg,r/m poi altri 2 byte per BAR che è una variabile di memoria e altri 2 byte per 1642 che deve essere codificato su 2 byte. Quindi per inserire l'istruzione nell'IR ci vorranno 3 cicli di fetch e per l'esecuzione?

Grazie
Motheborard: ASUS P5Q
Processore: INTEL Q9550
Memorie: Corsair DDR2 corsair 800mhz cl4
Scheda video: ATI gainward 4850 golden sample
Alimentatore: Corsair 550 watt
Case: cooler master gladiator 600
stex
Utente Junior
 
Post: 42
Iscritto il: 21/03/05 21:38

Sponsor
 

Re: ASSEMBLER 8086 parte teorica

Postdi zello » 08/04/09 17:21

Codice: Seleziona tutto
CMP FOO[DI+25], DH

Memoria, indiretto. Source register, Destination indirect memory
Codice: Seleziona tutto
JMP TABLE[SI]

Memoria, indiretto (equivalente a jmp word_ptr[si+table])
Codice: Seleziona tutto
MOV BAR[BX], 1642

Memoria, indiretto (è equivalente a mov word_ptr[bx+BAR], 1642). Source immediate, Dest. indirect memory
Codice: Seleziona tutto
ADD AL,76

Registro. Source immediate, Dest. Register
Codice: Seleziona tutto
POP [DI]

Memoria, indiretto.

Lascio a chi ha maggiore teoria la parte dei tempi di fetch/exec.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Re: ASSEMBLER 8086 parte teorica

Postdi zello » 08/04/09 22:33

... la tua nota sul fetching dovrebbe essere corretta (effettivamente mov rmv, iv è C7 xx[ byte ModRm, nel tuo caso 87], due bytes per BAR, due bytes per 1642; stante il bus a 16 bit dovrebbe costare 3 fetch, ognuna delle quali porta via un bus cycle).
In termini di execution, non ho indicazioni valide: per le mov con accesso in memoria, mi risulterebbe qualcosa del tipo tra 8 e 14 bus cycles + il tempo di calcolare l'effective address, che a sua volta dovrebbe essere tra 5 e 12 cicli; francamente mi sembra moltissimo, il manuale del 386 dice 2 cicli senza accesso in memoria, 4 cicli con accesso.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Re: ASSEMBLER 8086 parte teorica

Postdi stex » 10/04/09 13:38

dopo la fase di fetch, all'interno dell' IR ho l'indirizzo della direttiva MOV, poi l'indirizzo di memoria BAR[BX] e il dato 1642. Per eseguire l'istruzione dovrò prendere l'offset di BAR + il contenuto di BX e andare in memoria a posizionarmi e qui ho un accesso in lettura in un colpo di clock, poi prendo il dato 1642 dall' IR lo inserisco nell' MDR (che è a 16 bit) e lo scrivo alla posizione di BAR[BX] e questo è una scrittura nella memoria quindi un accesso in scrittura e lo sommo al primo quindi sono 2 cicli di bus tra lettura e scrittura. e poi avrei la fase di STORE. VI TORNA IL RAGIONAMENTO?
Motheborard: ASUS P5Q
Processore: INTEL Q9550
Memorie: Corsair DDR2 corsair 800mhz cl4
Scheda video: ATI gainward 4850 golden sample
Alimentatore: Corsair 550 watt
Case: cooler master gladiator 600
stex
Utente Junior
 
Post: 42
Iscritto il: 21/03/05 21:38


Torna a Programmazione


Topic correlati a "ASSEMBLER 8086 parte teorica":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti