Assembly 8086

Sia dato il seguente programma assembler per x8086
Mov DS,B000
Mov, BX, 1111
MoV,AX,1234h
Mov [BX],AL
Mov [Bx+1],AH
Mov AX,[BX]
Mov Dx,Bx
Out DX,AL
OUT DX,AH

Quant’e’ il CPI medio?
A Minore di 3
B Tra 3 e 4
C Tra 4 e 5
D Maggiore di 5

A che indirizzo viene fatta la lettura dalla memoria?
A B1111
B B1112
C B0000
D 1111

A che indirizzo vengono fatte le due scritture in memoria?
A B1111 e B1112
B B1111 e B1111,
C B111 e 1234
D 1111 e 1112

Cosa viene scritto in output?
A 11 e 11
B 34 e 34
C12 e 34
D 34 e 12

Qualcuno mi potrebbe dare le risposte corrette?..non ci salto fuori e tra pochi giorni dovrò sostenere un esame…
mi farebbe piacere anche un minimo di commento giusto per capirci di più…infinite grazie…

la lettura viene fatta dal’ istruzione
MOV AX,[BX] a B1111 , in quanto il puntatore base DS punta a B0000 , al quale devi aggiungere 1111 contenuto in BX

le due scritture sono
Mov [BX],AL
Mov [Bx+1],AH

e la risposta è A , in quanto bx punta sempre a 1111 + DS

quindi scrivi a B1111 e B1112 (BX+1)

La risposta corretta dovrebbe essere D, in quanto il valore 1234h viene diviso sui due registri AL e AH ( che compongono AX) , e questi vengono scritti su BX e BX+1
In pratica sarebbe come dare MOV [BX],AX , solo che hanno splittato tutto in 8 bit.

Siccome dovresti utilizzare il sistema little-endian, il valore di BX dovrebbe essere 3412 , ed essendo in little-endian , dopo l’ istruzione Mov AX,[BX] AL è 34 e AH è 12

[quote]
Qualcuno mi potrebbe dare le risposte corrette?..non ci salto fuori e tra pochi giorni dovrò sostenere un esame…
mi farebbe piacere anche un minimo di commento giusto per capirci di più…infinite grazie…[/quote]

in bocca al lupo.

Per il calcolo del CPI servono più dettagli sull’architettura usata perché dalla definizione del CPI (Clock Per Istruction) sai che è dato dal rapporto fra il numero di cicli usati per terminare e il numero di istruzioni eseguite.

Il numero di istruzioni eseguite è 9, ma il numero di clock usati dipende anche dalla memoria e gerarchia di memoria che si sta utilizzando. Supponendo che non ci sia gerarchia di memoria (quindi niente cache e niente memoria virtuale) ti serve sapere quanti cicli di clock costa l’indirizzamento a memoria e il trasferimento dalla/alla memoria, più i cicli di clock usati dalle istruzioni usate nel codice. Non conosco i dettagli architetturali dell’8086 per cui non so quanto ci metta a fare queste operazioni.

[quote=fenomeno]
Per il calcolo del CPI servono più dettagli sull’architettura usata perché dalla definizione del CPI (Clock Per Istruction) sai che è dato dal rapporto fra il numero di cicli usati per terminare e il numero di istruzioni eseguite.

Il numero di istruzioni eseguite è 9, ma il numero di clock usati dipende anche dalla memoria e gerarchia di memoria che si sta utilizzando. Supponendo che non ci sia gerarchia di memoria (quindi niente cache e niente memoria virtuale) ti serve sapere quanti cicli di clock costa l’indirizzamento a memoria e il trasferimento dalla/alla memoria, più i cicli di clock usati dalle istruzioni usate nel codice. Non conosco i dettagli architetturali dell’8086 per cui non so quanto ci metta a fare queste operazioni.[/quote]

E’ quello che mi chiedevo anche io…forse devo scaricarmi il manuale dell’intel…

[quote=fenomeno]
Per il calcolo del CPI servono più dettagli sull’architettura usata perché dalla definizione del CPI (Clock Per Istruction) sai che è dato dal rapporto fra il numero di cicli usati per terminare e il numero di istruzioni eseguite.

Il numero di istruzioni eseguite è 9, ma il numero di clock usati dipende anche dalla memoria e gerarchia di memoria che si sta utilizzando. Supponendo che non ci sia gerarchia di memoria (quindi niente cache e niente memoria virtuale) ti serve sapere quanti cicli di clock costa l’indirizzamento a memoria e il trasferimento dalla/alla memoria, più i cicli di clock usati dalle istruzioni usate nel codice. Non conosco i dettagli architetturali dell’8086 per cui non so quanto ci metta a fare queste operazioni.[/quote]

Sul manuale dell’intel ho trovato quello che cercavi:
http://matthieu.benoit.free.fr/cross/data_sheets/8086_family_Users_Manual.pdf (pag 76 - pag 78)

Ho provato a risolverlo ma a me viene l’opzione D

Non mi pare irragionevole:

  • non è superscalare
  • non ha pipeline
  • accede alla memoria
    quindi il CPI dovrebbe essere grossino, onestamente non ho voglia di cercare nel manuale i dati, comuqnue se hai associato il costo giusto all’istruzione giusta avrai fatto sicuramente giusto.