Pagina 1 di 2
CPU lato programmatore: cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 10:17
da toni00c
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?
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 10:32
da ubuntumate
Per quanto concerne il set di istruzioni supportate,fai così:
Alla voce flag trovi tutte le istruzioni supportate.
Per i registri non saprei, quelli standard sono noti.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 10:41
da toni00c
ciao grazie , ma il comando mi restituisce dettagli sulla cpu hardware , ma non il set di istruzioni :
io intendevo ad esempio add, mov , sub ect ect...
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 11:58
da Darren
a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
c'è un programma per programmare la cpu??
a sua volta come è stato realizzato quel programma??
nessuno mi ha mai saputo rispondere...
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 12:21
da Jhack
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.
questo è ciò che si trova sul sito intel altro non saprei dirti.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 17:09
da ubuntumate
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:
La parte in grassetto non contiene le istruzioni della CPU? Tra le tante vedo MMX SSE e SSE2.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 17:15
da thece
Le mie informazioni sono un pò vecchiotte, ma credo che facciano ancora così
Le "istruzioni" sono implementate fisicamente mediante transistor
Intendi linguaggio di programmazione
Assembler Assembly e relativi strumenti?
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 18:04
da Claudio_F
Darren ha scritto:
a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
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.
c'è un programma per programmare la 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.
a sua volta come è stato realizzato quel programma??
È 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).
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: mercoledì 29 luglio 2015, 21:42
da Jhack
Claudio_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:Darren ha scritto:
a me interesserebbe sapere come hanno inserito le istruzioni nella cpu.
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.
c'è un programma per programmare la 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.
a sua volta come è stato realizzato quel programma??
È 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).
questo è interessante
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 11:35
da Darren
intanto grazie per la risposta.
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...
le "macchine" capiscono solo ZERO e UNO (sempre se non sbaglio, no?)
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.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 11:44
da toni00c
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
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 11:51
da Darren
eh... ok... ma LUI come le sa queste cose??
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...
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 11:59
da toni00c
c'è un decoder che decodifica appunto le istruzioni ( per essere semplicistici)
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 12:10
da thece
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.
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 si
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 CPU
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 14:19
da Darren
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.
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 si
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 CPU
aspetta aspetta... tutto quello che mi dici è molto interessante, anche se in parte le conosco già.
voglio arrivare a questo punto qui: "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"
Ecco.
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.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 14:31
da thece
Lato software, quel qualcosa che traduce il comando MOV nel relativo codice oggetto (aka linguaggio macchina, aka codice binario) è l'assemblatore
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
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 14:41
da Darren
si, ma scusami se insisto... questo software assemblatore sarà stato creato da qualcuno??
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 15:11
da thece
Se la domanda è: come è fatto un (software) assemblatore. La risposta è: non lo so.
Nei miei studi, anche accademici, non sono mai arrivato a questo livello di dettaglio. Ci si è sempre fermati ad un livello un pò più alto, a spiegarne la funzionalità.
Anche il funzionamento di un microprocessore io non te lo saprei spiegare così nel dettaglio, diciamo costruttivo. Mi hanno sempre spiegato quella che è l'astrazione di un microprocessore.
L'Assembly (per la CPU Z80) l'ho studiato e usato solamente alle scuole superiori ... tanto tempo fa ... all'università mi hanno praticamente spiegato che c'era, a cosa serviva, più o meno come funzionava, ma senza scendere più di tanto nel dettaglio. Manca il tempo per farlo, si devono studiare anche tante altre cose
In merito alla mia esperienza a scuola con l'Assembly per lo Z80, quello che mi ricordo è che utilizzavamo degli "scatolotti" programmabili nei quali inserivamo direttamente il codice oggetto in esadecimale. Siamo di pelino sopra ai numeri binari. Probabilmente ho scritto anche qualcosa su PC del tipo: file di testo in Assembly, poi passato al software assemblatore, etc ... etc ... ma non ne ho memoria ... ti ripeto: è passato tanto tanto tempo
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 16:47
da noemarco
forse quest due link sono di aiuto (se ho capito la domanda..)
cpu:
http://www.enjoyphoneblog.it/20245/disc ... tiche.html
linguaggio macchina:
https://it.wikipedia.org/wiki/Linguaggio_macchina
https://it.wikipedia.org/wiki/CPU
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.
Re: [cpu] lato programmatore , cosa è visibile?
Inviato: giovedì 30 luglio 2015, 17:07
da thece
Spero di aver (minimamente) chiarito qualcosa.
Direi che siamo andati in OT, per ritornare alla domanda originale
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?
Banalmente prova a fare una ricerca in Rete con "intel x86 instruction set reference". Cosa??? ... preferisci l'architettura ARMv6?
