|
|
|
![]() |
|
Strumenti |
![]() |
#41 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Da questo punto di vista la programmazione a oggetti non è affatto diversa da quella strutturata, funzionale, logica, etc.: sono tutte "aliene" alla macchina, che interpreta ed esegue soltanto istruzioni che riconosce nel suo particolare formato (ISA).
La OOP consente "semplicemente" (!) di astrarre il codice in maniera diversa, ma sotto sotto l'implementazione fa uso di meccanismi come la VMT, che è implementata con un paio di istruzioni macchina (una "load" per leggere il puntatore alla VMT, e una "call" per leggere e saltare all'indirizzo del metodo virtuale selezionato. Per lo meno per x86/x64. Altre ISA possono richiedere più istruzioni). Detto in altri termini, la VMT altri non è che la classica tabella di puntatori a funzione che viene usata nei linguaggi di programmazione strutturati. Per cui se fosse "indigesta" / "aliena" alla macchina la prima, parimenti lo è anche la seconda. Per cui le obiezioni fatte alla OOP sono riconducibili a persone che non hanno sviluppato l'adeguata forma mentis per destreggiarla, essendo abituate soltanto al paradigma che hanno imparato e che è l'unico che conoscono. La classica paura del nuovo, insomma. Quote:
Per cui ancora no: le macchine non "leggono" il linguaggio macchina. Leggono il prodotto della traduzione in codice oggetto di un sorgente scritto in linguaggio (di cui quello macchina è uno dei tanti).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#42 | |
Member
Iscritto dal: Oct 2011
Messaggi: 146
|
Quote:
Es.se premo l'interruttore di una lampadina sto eseguendo il linguaggio macchina di quella lampadina (mappato su 1bit) e con 2 sole istruzioni(0 spento, 1 acceso), se ci fosse un controller prima dell'interruttore che deve interpretare o compilare "accendi" e "spegni" le cose cambiano allo stesso modo in assembly devi passare per l'Assembler(Livello1) che è un'altra macchina che sta al disopra della macchina fisica(Livello0) e ha il compito di compilare il codice in binario che poi l'Assembler produca un programma oggetto in binario non significa niente, domani puoi inventarti un linguaggio di altissimo livello che produca un programma oggetto in binario, diverso è se scrivi il programma oggetto in binario direttamente(qui non ci sono interpreti o compilatori) Negli anni 40 si scriveva direttamente in codice binario poi siccome non era molto umano si è creata un'altra macchina astratta l'assembler che aveva il compito di facilitare il compito del programmatore, sino ad arrivare ad oggi dove si sono sovrapposte sempre più macchine astratte |
|
![]() |
![]() |
![]() |
#43 |
Senior Member
Iscritto dal: Jan 2006
Città: Osimo (AN)
Messaggi: 3675
|
Verissimo ! Vallo a trovare un floppy da 8"
__________________
PC "wallet" TR1950x-ROG Zenith Extreme-7970-16GB DDR4 2133 - PC "soffitta" Ryzen9 5950x-Msi Carbon X570-6900xt-32GB DDR4 3000 - PC "camera" Ryzen9 3900x-Crosshair VI Hero-6900xt-32GB DDR4 3000
|
![]() |
![]() |
![]() |
#44 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
@Vi7o: ancora una volta stai mischiando codice oggetto (binario) con linguaggio macchina. Sono due cose diverse, e il primo rimane il risultato della compilazione/traduzione di un sorgente scritto col secondo.
Se si chiama LINGUAGGIO, ci sarà un motivo, no? E se l'altro si chiama codice oggetto (o binario), idem.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#45 | |||
Senior Member
Iscritto dal: Sep 2010
Messaggi: 4370
|
Quote:
Quote:
Per contro, visto che siamo in argomento, l'equivalente del goto in assembly, l'istruzione JUMP (JMP ecc...) è necessaria. Assembly è davvero qualcosa di disumano: bisogna scrivere molte righe, pianificando l'uso che se ne farà dei registri...per una semplice operazione a=4+5;, bisogna caricare nei registri gli operandi , e solo successivamente è possibile usare l'istruzione ADD e poi trascrivere il risultato memorizzato nel registro in memoria: 1 istruzione in C semplicissima sono diventate 4 istuzioni macchina (assembly) Quote:
L'assembler (assemblatore) che trasforma il file sorgente in codice oggetto, semplicemente converte le istruzioni in codice mnemonico in binario e le monta una accanto alle altre...non fa nient'altro Ultima modifica di tuttodigitale : 28-05-2016 alle 02:14. |
|||
![]() |
![]() |
![]() |
#46 | |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6098
|
Quote:
(entro limiti ragionevoli in base alla criticità ed alle schermature dove vengono installati). Semplicemente sono un numero limitato sistemi (che risalgono a fine anni '70 ed inizio anni '80) usati nei siti di lancio "fissi" e dalle basi dove sono custodite le testate e le armi aviolanciate, ed è più conveniente andare avanti con i pezzi di ricambio ed i floppy che hanno in stock piuttosto che sostituirli. Probabilmente quando sostituiranno i missili "fissi" sostituiranno anche tutto il sistema di lancio oppure rottamerano tutti i siti fissi, si appoggeranno solo sui sottomarini lanciamissili e sulle armi aviolanciate e sostituiranno solo il software di "gestione magazzino armi nucleari". Già ora UK e Francia fanno così, mentre Russia e Cina hanno siti fissi perchè non riescono ad avere un numero sufficiente di sottomarini lanciamissili "ben piazzati" (e con vettori con sufficiente portata ) da potersi appoggiare solo ad essi. |
|
![]() |
![]() |
![]() |
#47 |
Member
Iscritto dal: Oct 2011
Messaggi: 146
|
Ragazzi a questo punto non mi resta che citare wikipedia
![]() "Il linguaggio macchina viene spesso confuso con il linguaggio assembly e viceversa. L'assembly è in realtà un linguaggio di programmazione a basso livello che, analogamente ai linguaggi ad alto livello come C, C++, C#, Pascal, Java, Python, Visual Basic, Ruby, ecc., richiede un processo di traduzione. A differenza di questi ultimi, l'assembly consente una traduzione particolarmente semplice che trasforma ogni istruzione dell'assembly, in modo univoco, in una istruzione in linguaggio macchina. I codici operativi e i dati nel linguaggio macchina sono pattern (stringhe) di bit. L'assembly utilizza al loro posto istruzioni mnemoniche, che rendono più semplice al programmatore umano lo sviluppo e il debug di programmi." l'articolo completo è qui: https://it.wikipedia.org/wiki/Linguaggio_macchina Spero a questo punto che la vostra confusione possa dissolversi, altrimenti mi arrendo e vi auguro buona fortuna con le vostre convinzioni ![]() |
![]() |
![]() |
![]() |
#48 |
Senior Member
Iscritto dal: Jan 2010
Messaggi: 7529
|
Visto che state discutendo sui vari "linguaggi" di programmazione, e in particolare su quello Assembly e Binario(macchina), mi unisco alla discussione chiedendo una cosa che nessuno mi ha mai saputo spiegare, ovvero come è stato programmato il tutto?
Mi spiego meglio. Perchè da qualche parte si è pur dovuto iniziare. La "Macchina" capisce solo una sequenza di ZERO e UNO, quindi Binario. L'Assembly è il linguaggio che piu si avvicina a quello Binario. Ma cosa è stato usato per creare/inventare/programmare l'Assembly? Non credo che il computer stesso abbia dettato all'Uomo i comandi che lui accetta e quelli che invece non gli piacciono. C'è qualcuno che riesce a spiegarmi questa cosa? Grazie!
__________________
Telegram: @shutter1sland |
![]() |
![]() |
![]() |
#49 | |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 3826
|
Quote:
|
|
![]() |
![]() |
![]() |
#50 | |
Member
Iscritto dal: Oct 2011
Messaggi: 146
|
Quote:
Si parte dal presupposto che le macchine elettroniche comprendono solo la presenza/assenza di segnale elettrico(anche se non è proprio così per non scendere troppo nei dettagli), qui entra in gioco l'uomo, che assegna a presenza=1 assenza=0(anche se nella pratica accade il contrario) Quindi se tu hai una lampadina con due pulsanti puoi assegnarli i seguenti codici: 0 = spento 1 = acceso se crei un circuito fisico più complesso(si parlerebbe di maggior numero di "porte" e qui si parlerebbe di un altro linguaggio...): 00 = spento 01 = acceso 10 = strobo 11 = prossimo comando quindi se vuoi dare un istruzione complessa alla tua lampadina dovresti fare una cosa del genere: 01; 11; 10; 11; 00; avrai detto alla macchina(che riceve gli impulsi) accenditi, fai effetto strobo, spegniti qui nasce però il problema che lavorare con i binari diventa un po complicato, quindi posso montare una macchina intermedia: l'assembler questa macchina traduttore o meglio compilatore mi permette di dire(sempre tutto semplificato): acceso; prossima istruzione; strobo; prossima istruzione; spento; o addirittura chiamare il tutto "programma1" l'assembler leggendo queste 5 stringhe o 1 stringa nel caso di "programma1" compila la stessa sequenza binaria di prima, la macchina leggendo l'impulso eseguirà gli ordini in binario. Se non leggi il testo tra le parentesi diventa tutto più fluido. Ultima modifica di Vi7o : 28-05-2016 alle 13:12. |
|
![]() |
![]() |
![]() |
#51 | |
Senior Member
Iscritto dal: Sep 2010
Messaggi: 4370
|
Quote:
una volta che si dà in pasto all'assembler, NON esiste alcuna differenza se prima di questo processo hai usato il linguaggio macchina o l'assembly...il codice oggetto sarà IDENTICO, per dimensioni e prestazioni, perchè identica sarà la sequenza di bit.. Il fatto che l'assembly sia più lento del linguaggio macchina è una bufala, a meno di non eseguire la traduzione run-time...cosa che non avviene praticamente mai quando la fase di debugging è terminata. Una forma, se vogliamo primitiva di assembly è quello di usare il codice esadecimale in sostituzione di quello binario. Ad un 1010 viene sostituito la cifra A, modificandone la sintassi, ma mantenendo la semantica. Anche in questo caso i numeri esadecimali devono essere tradotti nei corrispettivi binari, prima di essere eseguibili dalla macchina. in sostanza, la differenza tra linguaggio assembly e macchina, è SOLO nella sintassi....detta in un altro modo, cambia la forma ma non la sostanza di quello che si scrive. |
|
![]() |
![]() |
![]() |
#52 |
Member
Iscritto dal: Oct 2011
Messaggi: 146
|
devo però correggerti tuttodigitale, perchè programmare in Assembly significa scrivere stringhe
le macchine sanno leggere stringhe? NO quindi hai bisogno di un'altra macchina(l'assembler) Se io so scrivere direttamente in linguaggio macchina ho bisogno dell'Assembler? NO Cosa è più efficiente 1 macchina che esegue il codice al volo o 2 macchine(macchina+assembler), sta benedetta traduzione assembly/codice_macchina porta via tempo o no?SI anche Nero o ImgBurn creano codice macchina per il lettore cd ma Quanto vi fanno aspettare? Per intenderci nell'esempio della "lampadina a 4funzioni" che ho fatto sopra l'Assembler per leggere istruzioni stringa per sta lampadina sarebbe una macchina più complicata della "lampadina a 4funzioni" stessa, perchè minimo deve saper leggere i caratteri alfanumerici Un altro esempio: se io voglio spegnere la tv ho due vie: 1 - spengo dal tasto attaccato alla tv(può essere visto come linguaggio macchina)più comodo per la macchina meno per l'uomo. 2 - spengo dal tasto del telecomando(può essere visto come linguaggio assembly) devo prevedere altro hardware, più comodo per l'uomo meno per la macchina il risultato è si lo stesso ma posso benissimo fare a meno del telecomando in modo più efficiente per il tv, e meno costoso per l'uomo(costo del telecomando, e del controller hw/sw) |
![]() |
![]() |
![]() |
#53 | |
Senior Member
Iscritto dal: Jul 2004
Messaggi: 2865
|
Quote:
A casa dei miei ci sono ancora due storage IBM 1311 con 5 o 6 disk pack (erano soprannominati Pizze! ![]() Che dici, li mandiamo assieme? ![]() |
|
![]() |
![]() |
![]() |
#54 | |
Senior Member
Iscritto dal: Sep 2010
Messaggi: 4370
|
Quote:
un esempio sempre attinente alla TV è il seguente... sono seduto distante (rappresentazione mnemonica). una volta che mi sono avvicinato (traduzione al binario), non esiste più nessuna differenza anche nelle istruzioni svolte (spegnere la tv con il tasto) ....e se le istruzioni eseguite sono identiche lo è anche la veloxità. E una volta che ho ottenuto il codice oggetto, resterl vicino alla TV per l'eternità Ultima modifica di tuttodigitale : 28-05-2016 alle 15:36. |
|
![]() |
![]() |
![]() |
#55 | ||
Senior Member
Iscritto dal: Sep 2010
Messaggi: 4370
|
Quote:
E questa è anche la ragione per cui i parametri vengono per lo più passati per valore. Quote:
La domanda interessante, è chi ha dato la lingua alla macchina...la lingua è intrinseca nella progettazione della macchina,e dovuta nella forma più semplice in quella che viene chiamata CU (Control Unit), una rete combinatoria che in base al codice eseguibile, (determinato dal produttore in fase di progetto) cambia la configurazione della CPU. In sostanza, come ha spiegato Vi70, l'istruzione non fa che aprire e chiudere determinati fili, bus....ad esempio mettere in comunicazione tre registri per l'istruzione ADD, o mettere in comunicazione un registro e la RAM, e nel caso abilitare il comando read/write enable per registro/ram rispettivamente se è un'istruzione STORE, o abilitare il comando write/read enable se è un'istruzione LOAD. PS non sono un programmatore. |
||
![]() |
![]() |
![]() |
#56 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Sintassi, appunto perché parliamo di un linguaggio che viene utilizzato per rappresentare qualcosa che andrà a finire poi nel codice oggetto/binario.
La rappresentazione esadecimale usata al posto di quella binaria (ma s'è usata anche quella ottale) è un esempio di sintassi diversa impiegata per il linguaggio macchina di un'architettura, che finisce poi per generare il codice oggetto finale una volta effettuata la traduzione. Non c'è nessuno che nei primi anni '80 ha mai scritto qualcosa in linguaggio macchina? Si usavano le opcode table per le istruzioni, facendo poi i calcoli a mano per gli offset (istruzioni di salto "breve", in particolare), e si mettevano via via tutti i byte in sequenza per generare il listato finale. Nessuno ha mai visto le riviste dell'epoca, come LIST o anche la famosissima MC MicroComputer, che riportavano listati da digitare contenenti queste sequenze, che venivano poi tradotte e caricate in precise zone di memoria, per poi essere eseguite con istruzioni tipo SYS? Quei listati contenevano blocchi di istruzioni (tipo DATA) che contenevano appunto i codici binari/ottali/esadecimali in linguaggio macchina. A volte per ogni riga veniva aggiunto un byte extra di checksum per verificare che la riga non contenesse errori di digitazione; ovviamente il byte non veniva copiato in memoria. Basti, quindi, andare a prendere una di queste riviste (e non Wikipedia), spulciarla, e toccare con mano cosa significava scrivere un programma in linguaggio macchina, e cosa si otteneva alla fine (il codice oggetto da qualche parte in memoria). TL;DR: due cose diverse. Aggiungo un paio di precisazioni: non c'è necessariamente corrispondenza biunivoca fra istruzioni assembly e corrispondenti in linguaggio macchina. Esistono, infatti, architetture come i Motorola 68K o gli Intel x86 che presentano aliasing nelle istruzioni: la stessa istruzione in assembly può essere tradotta in una di diverse in linguaggio macchina, di cui ovviamente l'assemblatore ne sceglierà sempre e soltanto una. Infine sì: lavorare in assembly non era affatto semplice, ma all'epoca quello c'era (se si voleva velocità e/o compattezza), ma c'è da dire che architetture come quelle elencate prima consentivano di scrivere programmi in maniera più facile rispetto ad altre architetture. Infatti alcune istruzioni C, come ad esempio l'incremento di una variabile, si mappano in esattamente una istruzione assembly.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#57 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non è nemmeno vero che un programma scritto in "logica sequenziale" debba essere più veloce di uno in OOP: dipende sempre dal tipo di codice, e da com'è implementato il meccanismo di dispatching dei metodi nel secondo caso.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#58 |
Senior Member
Iscritto dal: Sep 2010
Messaggi: 4370
|
|
![]() |
![]() |
![]() |
#59 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E io t'ho dato ragione.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#60 | |
Member
Iscritto dal: Oct 2011
Messaggi: 146
|
Quote:
Nessuno = 0 1>0 qui se non io è la matematica che ti smentisce Quindi una volta ti sei alzato(compilazione assembly>binario), e se non ti pesa alzarti(sai programmare in linguaggio macchina), tanto che sei vicino al tv, risparmi le batterie del telecomando(avere un assembler) ribadisco il risultato è lo stesso ma a regime in presenza di hw/sw specifico e questo non è banale, e meno male non vorrei mai programmare in binario... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:42.