ho un intel I3m 350 : non riesco a trovare dettagli nel web
suppongo che la mia cpu rispetto ad esempio a un P4 core duo sia differente dal punto di vista del programmatore (almeno un po ) : sbaglio?

Codice: Seleziona tutto
cat /proc/cpuinfo
ciao grazie , ma il comando mi restituisce dettagli sulla cpu hardware , ma non il set di istruzioni :ubuntumate [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785820#p4785820][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Per quanto concerne il set di istruzioni supportate,fai così:Alla voce flag trovi tutte le istruzioni supportate.Codice: Seleziona tutto
cat /proc/cpuinfo
Per i registri non saprei, quelli standard sono noti.


a parte i set comuni a 32 e 64 bit supporta sse4.1/4.2. non supporta invece l aes o istruzioni più recenti come avx.toni00c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785817#p4785817][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ciao ho una domanda banale : sapete dirmi com'è possibile sapere con certezza per una specifica cpu il suo set istruzioni e i registri visibili al programmatore?
ho un intel I3m 350 : non riesco a trovare dettagli nel web;
suppongo che la mia cpu rispetto ad esempio a un P4 core duo sia differente dal punto di vista del programmatore (almeno un po ) : sbaglio?

Codice: Seleziona tutto
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Pentium(R) Dual CPU E2200 @ 2.20GHz
stepping : 13
microcode : 0xa4
cpu MHz : 1200.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm
bogomips : 4389.27
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Pentium(R) Dual CPU E2200 @ 2.20GHz
stepping : 13
microcode : 0xa4
cpu MHz : 2200.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
[b]flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm[/b]
bogomips : 4389.27
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

Le "istruzioni" sono implementate fisicamente mediante transistorDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785858#p4785858][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
Intendi linguaggio di programmazione Assembler Assembly e relativi strumenti?Darren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785858#p4785858][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: c'è un programma per programmare la cpu??
a sua volta come è stato realizzato quel programma??

Si progettano le istruzioni, si stabiliscono le sequenze binarie che rappresentano le istruzioni, si progettano i circuiti in grado di reagire a quelle sequenze realizzando la funzione prevista. Di fatto le istruzioni assembly sono già delle astrazioni sulle funzioni logiche dei circuiti sottostanti.Darren ha scritto: a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
Ci sono programmi di progettazione elettronica con cui assemblare le varie funzioni logiche, dopo di che si passa all'incisione su silicio dei componenti necessari a realizzarle.c'è un programma per programmare la cpu??
È un processo che si è evoluto nel tempo, dai primi cablaggi a mano agli attuali software che permettono di assemblare macrofunzioni sempre più complesse. Oggi è diventato perfino possibile realizzare via software i circuiti di intere CPU a partire da matrici di porte inizialmente scollegate che vengono collegate tra loro in base al contenuto di una memoria (FPGA).a sua volta come è stato realizzato quel programma??

questo è interessanteClaudio_F [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785986#p4785986][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Si progettano le istruzioni, si stabiliscono le sequenze binarie che rappresentano le istruzioni, si progettano i circuiti in grado di reagire a quelle sequenze realizzando la funzione prevista. Di fatto le istruzioni assembly sono già delle astrazioni sulle funzioni logiche dei circuiti sottostanti.Darren ha scritto: a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
Ci sono programmi di progettazione elettronica con cui assemblare le varie funzioni logiche, dopo di che si passa all'incisione su silicio dei componenti necessari a realizzarle.c'è un programma per programmare la cpu??
È un processo che si è evoluto nel tempo, dai primi cablaggi a mano agli attuali software che permettono di assemblare macrofunzioni sempre più complesse. Oggi è diventato perfino possibile realizzare via software i circuiti di intere CPU a partire da matrici di porte inizialmente scollegate che vengono collegate tra loro in base al contenuto di una memoria (FPGA).a sua volta come è stato realizzato quel programma??

intanto grazie per la risposta.thece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785956#p4785956][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Le mie informazioni sono un pò vecchiotte, ma credo che facciano ancora così
Le "istruzioni" sono implementate fisicamente mediante transistorDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785858#p4785858][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
Intendi linguaggio di programmazione Assembler Assembly e relativi strumenti?Darren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785858#p4785858][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: c'è un programma per programmare la cpu??
a sua volta come è stato realizzato quel programma??

eh... ok... ma LUI come le sa queste cose??toni00c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786226#p4786226][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:la codifica delle istruzioni è dovuta alla tensione presente nei transistor che io sappia : la mov come istruzione non è altro che una sequenza di 0 e 1
c'è un decoder che decodifica appunto le istruzioni ( per essere semplicistici)Darren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786236#p4786236][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:eh... ok... ma LUI come le sa queste cose??toni00c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786226#p4786226][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:la codifica delle istruzioni è dovuta alla tensione presente nei transistor che io sappia : la mov come istruzione non è altro che una sequenza di 0 e 1
cioè, non credo che il transistor nasce già di per se conoscendo l'istruzione MOV, e siamo stati noi Uomini a scoprire che lui capisce la parola MOV.
spero davvero di riuscire a farmi capire...

Parti dal presupposto che una CPU in realtà esegue operazioni molto molto molto più semplici, riducendo all'osso: somme e confronti. Le operazioni complesse vengono suddivise in operazioni molto molto semplici, ma eseguite molto molto velocemente.Darren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: si, so che dentro ci sono fisicamente dei transistor, ma intendevo dire come gli "insegni" al transistor che tu programmatore dando il comando RIDI lui deve Ridere??
non so se riesco a spiegarmi bene...
Assolutamente siDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: le "macchine" capiscono solo ZERO e UNO (sempre se non sbaglio, no?)
No, il transistor non legge l'istruzione MOV. L'istruzione MOV viene tradotta dall'assemblatore nel relativo codice macchina, fatto di 0 e 1, supponiamo 00110011. Questo codice macchina, caricato inizialmente in RAM, poi istruzione per istruzione nella CPU, viene opportunamente interpretato dalla CPU stessa, che quindi realizzerà la funzione MOV attivando opportuni circuiti fatti con le operazioni base di cui sopra. Ossia la CPU quando riconosce l'istruzione 00110011 attiva gli opportuni circuiti per spostare (ad esempio) un dato contenuto in un certo registro della CPU in ul altro registro della CPUDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: il linguaggio che piu si avvicina al linguaggio macchina è l'Assembly. (e anche fino qui sapevo)
ma l'assembly è comunque un linguaggio, che prima non esisteva, quindi in qualche modo è stato creato.
e come è stato creato??
ad esempio, l'instruzione MOV
dubito che il transistor "legga" lettera per lettera la parola MOV e capisca cosa deve fare, ci sarà una "conversione" nel suo linguaggio binario.
quindi con qualcosa deve pur essere stato fatto questo lavoro se prima non c'era niente.[/color]

aspetta aspetta... tutto quello che mi dici è molto interessante, anche se in parte le conosco già.thece ha scritto:Provo a risponderti, ma:
- non sono bravo a spiegare
- non sono bravo a scrivere
- è tanto tempo che non rivedo questi concetti
e una spiegazione del genere, pur semplificata, richiede tante tante parole. Per chi ne sa: vi prego, perdonatemi
Parti dal presupposto che una CPU in realtà esegue operazioni molto molto molto più semplici, riducendo all'osso: somme e confronti. Le operazioni complesse vengono suddivise in operazioni molto molto semplici, ma eseguite molto molto velocemente.Darren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: si, so che dentro ci sono fisicamente dei transistor, ma intendevo dire come gli "insegni" al transistor che tu programmatore dando il comando RIDI lui deve Ridere??
non so se riesco a spiegarmi bene...
Il singolo transistor (in una CPU) fa essenzialmente una cosa sola. Fa passare o non fa passare la corrente dal source al drain in funzione del fatto che il suo gate sia alimentato o meno. Con questa semplice funzione è già possibile, collegando opportunamente fra loro in cascata più transistor, costuire i circuiti base che implementano le operazioni logiche / booleane: NOT, OR, AND, XOR ... Con queste semplici operazioni logiche / booleane è possibile a sua volta costruire funzioni più complesse (ma sempre circuiti): le somme, i confronti, etc ... Intravedi il meccanismo?
Assolutamente siDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: le "macchine" capiscono solo ZERO e UNO (sempre se non sbaglio, no?)
No, il transistor non legge l'istruzione MOV. L'istruzione MOV viene tradotta dall'assemblatore nel relativo codice macchina, fatto di 0 e 1, supponiamo 00110011. Questo codice macchina, caricato inizialmente in RAM, poi istruzione per istruzione nella CPU, viene opportunamente interpretato dalla CPU stessa, che quindi realizzerà la funzione MOV attivando opportuni circuiti fatti con le operazioni base di cui sopra. Ossia la CPU quando riconosce l'istruzione 00110011 attiva gli opportuni circuiti per spostare (ad esempio) un dato contenuto in un certo registro della CPU in ul altro registro della CPUDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786218#p4786218][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: il linguaggio che piu si avvicina al linguaggio macchina è l'Assembly. (e anche fino qui sapevo)
ma l'assembly è comunque un linguaggio, che prima non esisteva, quindi in qualche modo è stato creato.
e come è stato creato??
ad esempio, l'instruzione MOV
dubito che il transistor "legga" lettera per lettera la parola MOV e capisca cosa deve fare, ci sarà una "conversione" nel suo linguaggio binario.
quindi con qualcosa deve pur essere stato fatto questo lavoro se prima non c'era niente.[/color]

Lato software, quel qualcosa che traduce il comando MOV nel relativo codice oggetto (aka linguaggio macchina, aka codice binario) è l'assemblatoreDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786284#p4786284][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Noi tutti sappiamo che con 00110011 (tanto per esempio) il transistor eseguirà un determinato comando MOV.
Ma deve essere stato creato "dal nulla" qualcosa che Traduce appunto MOV > 00110011.

si, ma scusami se insisto... questo software assemblatore sarà stato creato da qualcuno??thece [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786292#p4786292][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Lato software, quel qualcosa che traduce il comando MOV nel relativo codice oggetto (aka linguaggio macchina, aka codice binario) è l'assemblatoreDarren [url=http://forum.ubuntu-it.org/viewtopic.php?p=4786284#p4786284][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Noi tutti sappiamo che con 00110011 (tanto per esempio) il transistor eseguirà un determinato comando MOV.
Ma deve essere stato creato "dal nulla" qualcosa che Traduce appunto MOV > 00110011.
Lato hardware, quel qualcosa che traduce il comando MOV, quindi il relativo codice oggetto, nella corrispondente funzionalità è il circuito elettronico, fatto (in definitiva) di transistor


Set d'istruzioni macchina
Le istruzioni di una CPU (instruction set) sono semplicemente dei numeri, detti opcode o codici operativi: in base al loro valore l'unità di controllo intraprende delle azioni predefinite, come per esempio leggere la successiva locazione di memoria per caricare un dato, oppure attivare la ALU per eseguire un calcolo, oppure scrivere il contenuto di un registro in una certa locazione di memoria o in un altro registro, oppure una combinazione di queste.
Per una persona, stendere programmi scrivendo direttamente gli opcode è estremamente noioso e prono all'errore. Per questo motivo si utilizza l'assembly, che associa un simbolo mnemonico ad ogni istruzione della CPU e introduce una sintassi che permette di esprimere i vari metodi di indirizzamento in modo più intuitivo.

La risposta è si, basta cercare in Rete e le specifiche delle istruzioni e relative estensioni si trovano. Dovrebbero essere informazioni pubbliche, altrimenti come si riuscirebbe a costruire i compilatori? Immagino che (esempio) Intel voglia assolutamente nascondere i dettagli con cui costruisce le proprie CPU, ma non le istruzioni per usarle. Il suo businness è vendere CPU, o no?toni00c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4785817#p4785817][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: ... sapete dirmi com'è possibile sapere con certezza per una specifica cpu il suo set istruzioni e i registri visibili al programmatore?
Visualizzano questa sezione: drakfire e 9 ospiti