Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: Assembly

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    10

    Assembly

    Salve sono alle prese con un esercizio di assembly....forse non è la sezione giusta ma non sapevo dove altro scriverlo....
    Dato un processore CISC a singolo bus interno con memoria non seg-
    mentata, bus dati e bus indirizzi entrambi a 16 bit, e 4 registri Ri, i = 1 : : : 4,
    fornire una codi¯ca di macchina plausibile per l'istruzione XCHG <op1>,<op2>
    che scambia tra loro gli operandi <op1> e <op2>. Gli operandi siano speci-
    ¯cabili attraverso le modalitµa di indirizzamento (1) registro, (2) indiretto di
    registro. Calcolare il numero di cicli di bus necessari per il fetch e l'esecuzione
    dell'istruzione al variare delle modalitµa di indirizzamento. Scrivere quindi il
    microprogramma di controllo relativo alla fase di esecuzione dell'istruzione
    XCHG Ri,[Rj].

    Se qualcuno riuscisse a darmi una dritta ne sarei grato.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Prima di leggere, considera che la risposta potrebbe nn essere corretta.

    Consideriamo il fetch, nn hai parlato di buffer di prefetch, quindi si puo assegnare 1 o 2 cicli di clock (forse di + considerando la postilla di sotto) anche perche deve leggere il dato dalla memoria.
    Poi lo scambio(?) registro registro presumo possa essere benissimo un'altro ciclo di clock.
    Con in gioco la memoria, devi considerare un ciclo in + (considera sempre la postilla di sotto) per ogni accesso di memoria che l'istruzione compie.
    Vuoi anche cosiderare il tipo di CPU CISC che ha una tabella di istruzioni + grande e quindi impiega + tempo per la codifica?

    qui puoi trovare qualche aiuto considera che parla dello z80

    PS:
    Considera che gli accessi alla memoria nn hanno la stessa velocita della CPU e che accessi sequenziali sn + veloci rispetto a quelli casuali.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    10
    sono riuscito a trovare una tabella sulle specifiche di tale istruzione: XCHG Ri Rj cicli di clock : 4 numero byte :2. ma non riesco a capire come possono essere 4 colpi di clock...fa riferimento secondo te sia alla fase fetch+ esecuzione? teoricamente visto che i registri sono interni alla Cpu non dovrebbe esserci un accesso alla memoria. o ho detto una cavolata?! poi altro dubbio.. dove viene salvato il dato da scambiare? se ho 4 registri disponibili(come in esempio non è detto siano liberi..) posso usare il registro di supporto della ALU(intendo per effettuare lo swap)?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Il fetch preleva dalla memoria l'istruzione. Il tempo di esecuzione di un'istruzione è l'intero fetch&execute che è strettamente legato alla memoria. Di certo usera' un registro interno.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    10
    quindi è possibile che la sequenza sia questa con Y registro di supporto della ALU :
    Ri(out) Y(in)
    Rj(out) Ri(in)
    Y(out) Rj(in) con questa operazione ho effettuato un banalissimo swap utilizzando 3 cicli o sbaglio?


    Grazie dell aiuto sino ad ora

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Hai fatto 3 steps, che possono anche essere 3 colpi di clock, (sarebbe lentissimo sta CPU), ma si parla di operazioni interne alla CPU.
    Qui un'altra bella pagina.
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    10
    non riesco proprio a capire come calcolare i cicli di bus...in via teorica l ho capito ma quando prendo inn mano un istruzione non riesco a definirli ...

  8. #8
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Nella pagina che ti ho linkato ce una sezione Pipelining, puoi benissimo usare quella cm riferimento, o meglio usare quella del testo da cui leggi l'esercizio.
    Considera che la tua CPU dovrebbe avere una sola pipeline.

    I cicli di bus, sono quelli dettati dal clock principale che è il riferimento per tutte le unita del tuo sistema. La cpu lavora solitamente a multipli di questo clock.
    Per gli Spartani e Sparta usa spartan Il mio github

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    10
    Ok dopo averci ragionato un po sono arrivato a questa conclusione:

    Se mi riferisco all istruzione XCHG Ri Rj i cicli saranno rispettivamente 2 per la lettura dell istruzione bus dati a 16 bit istruzione lunga 3byte(2per operando+registro +1Byte per il registo Rj) non ci sono lettura dalla memoria dato che il registro è interno alla cpu quindi non utilizzo il bus e quindi ergo nessun ciclo. quindi la fase di fetch è pari a 2. per la fase di execute dovrebbero essere tre se il ragionamento dello swap è corretto.

    Se invece l istruzione è con indirizzamento indiretto quindi XCHG Ri [Rj] avro sempre 2 cicli per la lettura dell istruzione (stesso ragionamento di prima) {la lettura dell indirizzo di memoria contenuto in Rj la considero?!(credo di no, visto che il dato è gia interno al registro)} Per la fase di execute adesso avro in piu un ciclo dato che dovro leggere il contenuto dell indirizzo di memoria contenuto in R5+ i 3 cicli dovuti alla fase di swap.


    Secondo te è giusta o è un idea del tutto sballata?!

  10. #10
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Allora anch'io ho fatto delle ricerche e sn arrivato alla conclusione che alcuni assembler codificano il NOP (nessuna operazione) cm XCHG r0,r0, cs che su x86 mi sembra essere mov eax,eax.

    Cmq per l'indirizzamento indiretto ce una lettura ed una scrittura (minimo) rispetto alla precendente.
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.