assemble Quanto è ostico e complicato programmare nel linguaggio-macchina assembler! francesco Melis su smanettando, 14\01\2014, h. 22.04. d. (omissis) Di quale processore non lo so, so solo che sono programmi assemblatori dove bisogna programmare il linguaggio macchina, quindi mettendo istruzioni come add o sub e indicare i registri coinvolti nelle operazioni. Io ho provato a installarli sul mio PC, che ha Windows 7 e jaws 13. Il problema è che quando li lancio, jaws continua a ripetere vuoto e ovviamente sulla barra non appare nulla, quindi io non leggo quello che sto scrivendo, anche se a monitor si legge tutto r. Adesso è un po' più chiaro. Assembly, di per se, non è un programma, ma un linguaggio di programmazione a basso livello mirato alla programmazione di un determinato processore. C'è, quindi, per esempio, un linguaggio assembler per la famiglia intel x86 che è la classe di microprocessori dei comuni PC e linguaggi assembler per processori di altre case, per esempio il processore ad 8 bit Z80. Il linguaggio assembler sta in rapporto uno ad uno con il linguaggio macchina. Si usa l'assembler poiché facendo uso di istruzioni mnemoniche è più semplice da scriverci i programmi anziché usare direttamente i codici numerici binari delle istruzioni macchina. Per programmare in linguaggio assembler (o assembly se preferisci), si usano i programmi assemblatori e ne esistono molti anche freeware ed Open Source. Tutti producono dopo l'operazione di assemblaggio il codice macchina per quel processore, vale a dire i programmi. I programmi assemblatori per un determinato processore, prodotti da case diverse, pur producendo tutti codice eseguibile per quel processore su un determinato Sistema Operativo si differenziano per delle "direttive" che occorre specificare in testa al codice di un programma in assembler. Allora ci potrebbero essere delle piccole differenze fra le modalità di programmazione di un assemblatore della Microsoft rispetto ad uno della Borland o di altre case. Però ci sono assemblatori che "clonano" le modalità di quelli famosi e risultano quindi compatibili a livello di codice sorgente con quelli che emulano. Quindi, se il tuo assemblatore non è molto accessibile con il tuo ausilio, potresti provare a trovarne qualcuno, clone, che sia compatibile a livello di codice e magari un po' più accessibile all'ausilio. Non so quale sia il tuo livello di preparazione di base sulla struttura dei microprocessori e quale sia il contesto per il quale ti è richiesto di saper programmare in assembler, però voglio in questa sede fare qualche considerazione dettata dalla mia esperienza. Intanto si può programmare in assembler per un determinato particolare processore anche con assemblatori che girano su computers con sistema operativo e processori differenti rispetto a quello per il quale si sta programmando. Quindi, per esempio, si può programmare in assembler su un comune pc per produrre codice che giri su microcontrollori per schede dei ricevitori satellitari che hanno il loro specifico linguaggio macchina diverso da quello dei PC. Secondo elemento: Programmare il assembler è molto, molto difficile. Direi mooooooolto più difficile che programmare in Java, o C o Python. Programmare in assembler per un processore moderno montato su un PC richiede anche, e necessariamente, una conoscenza molto elevata della struttura del processore, intesa come conoscenza dei suoi registri interni, stack pointer, registri di indirizzo, registro dei flag, registro delle interruzioni ecc... Programmare in assembler seriamente richiederebbe anche conoscere i diagrammi di timing dell'accesso alla memoria in lettura e scrittura e sapere ed usare bene i cicli macchina delle istruzioni per arrivare a produrre anche codice efficiente. Insomma occorre anche conoscere delle cose che non sono proprio alla portata di chi volesse dilettarsi cimentandosi con queste problematiche tecniche. Cito qualche esempio tratto dalla mia esperienza. A suo tempo ho studiato il microprocessore Z80 che veniva montato sugli home computer ZX Spectrum prodotti da Sinclair, (si parla dei primissimi anni '80), ed il processore Motorola MC68000 che veniva montato sui primi McIntosh di Apple. Ho studiato anche per l'esame di Calcolatori elettronici i processori della famiglia 8086 che venivano montati sui primi Pc. Ebbene, mentre la programmazione in linguaggio macchina dello Z80 era ancora a portata di "essere umano" e si potevano fare tranquillamente, con il dovuto sforzo, ed in tempi ragionevoli, anche progetti hardware e software basati su quel processore, per il processore 8086 la complessità era talmente elevata che un corso universitario del quarto anno di ingegneria elettronica sarebbe stato assorbito solo per la conoscenza del processore. Quindi era troppo difficile fare progetti hardware con quel processore. Allora nei dipartimenti di elettronica si erano inventati dei processori didattici a 32 bit che avessero una struttura più semplice da capire ed usare in modo da consentire di farci dei progetti hardware completi in tempi ragionevoli. Questi processori ovviamente erano solo delle simulazioni teoriche di un processore e non esistevano nella realtà. Comunque era sufficiente per farci dei progetti e verificarli con dei simulatori costruiti ad hoc. Potrebbe essere allora che questo sia il tuo caso. Un processore didattico che non esiste nella realtà e che purtroppo ti obbliga a programmarci con quello specifico programma simulatore del processore. In tal caso se il simulatore non è molto accessibile al tuo ausilio non credo che ci sia molto da fare. Comunque, alle brutte, si può programmare anche solo usando carta e penna o con il comunissimo blocco note e poi assemblare il tutto con un aiutino da parte di qualcuno che avvierebbe al tuo posto il processo di assemblaggio. Certo, non è proprio uno scherzo, però si può fare. La programmazione si fa con la testa al di la dello strumento che poi userai per assemblare il tuo codice. Io, per esempio, mi divertivo assai a programmare tutto su carta. E' una gran soddisfazione, ma occorreva metterci tutti i 5 sensi. Facendo tutto a mano devi anche calcolare a mano gli indirizzi di memoria nella quale andranno a finire le istruzioni per poterli inserire nelle istruzioni di salto assoluto o condizionato. In questo modo, molto artigianale invero, non c'è addirittura neanche bisogno del programma assemblatore dal momento che devi produrre tu, direttamente, a mano, il file eseguibile senza affidarti al traduttore.Torna all'indice