Dall'assembly ai linguaggi di alto livello

pabloski

Utente Èlite
2,868
916
Imparare cose che servono per fare la pratica. Bisogna leggere e capire le cose che si utilizzano.
Poi imparare anche un minimo di cose di teorica che riguardano i concetti e le definizioni.

Si ma per ora un linguaggio è per te solo uno strumento. Man mano che lo userai capirai pure quali cose fa dietro le quinte.

Copiare del codice in rete, mettere assieme qualcosa, e farlo funzionare... riguarda il linguaggio C e serviva per farvi capire che per me non conta Solo l' estetica e che i motivi per cui non riesco ad andare avanti con questo linguaggio.

Ecco questo mi ha fatto venire un dubbio. Ma non è che fino ad ora ti sei limitato a copiare codice da internet e il problema è che non riesci ad implementare soluzioni algoritmiche da codificare successivamente? Perchè se è così il problema è strutturale e non riguarda i linguaggi.

Se si tratta di leggere in maniera approfondita (non superficiamente) non c'è problema.
Riguardo allo studio, nulla fare.

Non sono la stessa cosa? Per leggere cosa intendi esattamente? Tipo romanzo? Cioè non riesci a trasformare quello che leggi in nozioni che ti indirizzino successivamente durante la programmazione?
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Lo facevo sul Commodore 64 all'inizio ma sia il linguaggio che il sistema erano troppo limitati.
Io volevo poter usare i sottoprogrammi e le funzioni quindi amavo il Simon's Basic.

Quindi sono passato a Visual Basic 6 e mi ha dato molte soddisfazioni.
Adesso sono su C# che sento una evoluzione naturale di quello che facevo in Visual Basic.
Ciao, curiosità.. ma sei passato dal c64 al vb6?.. non mi torna in termini temporali.. ci sarà pur stato qualcosa in mezzo!

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Comunque, caro @chibacrome, non capisco questa ossessione di mescolare sempre C Pascal e Assembly x86.
Sono davvero cose molto diverse, in particolare l'assembly, di cui non riesco a immaginare tu cosa ne abbia compreso. Non è tanto nella difficoltà (in tal caso soprattutto quello x86 nella gestione della memoria e indirizzamento con offset e segmentazione), ma nel fatto che si tratta di un linguaggio ostico diametralmente opposto a quelli di alto livello: ogni tipo di assembly, aldilà delle istruzioni, che quelle di base sono analoghe, necessità di imparare delle specifiche tecniche di programmazione su come organizzare il codice è come ottenere specifici risultati.. in linguaggi di alto livello gli algoritmi e le tecniche di programmazione sono esportabili, in assembly no!
Questa differenza essenziale mi rende perplesso del fatto che tu sappia di cosa stai parlando.

Sinceramente, hai scritto dei programmi in assembly? Che non sia hallo world copiato da Wikipedia? Per fare cosa?

Poi altra cosa, comunque già detta: ti è stato fatto notare che un linguaggio è uno strumento e ognuno specifico per affrontare certi tipi di problemi. La scelta che viene fatta non avviene in base a estetica o al gusto per le parentesi graffe o meno.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
  • Mi piace
Reazioni: Andretti60

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,244
5,674
Ciao, curiosità.. ma sei passato dal c64 al vb6?.. non mi torna in termini temporali.. ci sarà pur stato qualcosa in mezzo!
Eh eh... ci sono stati il C, poco GW Basic, C++, poco Prolog, tanto JPL
Ma io elencavo i linguaggi preferiti nel hobby e non quelli di studio o lavoro ;)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Mi ero dimenticato che fosse per Ms-dos oppure per il cmd fino ad Xp.

Il problema in realtà è dovuto al fatto che il codice a 16bit viene eseguito da OS Windows a 32bit e non dai 64bit (ci sono in realtà rarissime eccezioni su alcuni software in particolare).

Io mi riferisco al programma Hello World in C senza includere una libreria e quindi a scrivere il contenuto della libreria all' interno del programma. Includendo una libreria il programma ovviamente è più corto. Vorrei solo capire questo argomento.

Non esiste un "e quindi a scrivere il contenuto della libreria nel programma"... mi è difficile anche contestare affermazioni simili. Non esiste nel senso che non è concepibile. Le librerie, intese come librerie di codice, servono proprio per svolgere determinati compiti. Oltretutto, anche nel tuo esempio di qualche post fa, utilizzavi librerie, ma erano native dell'OS; questo implica anche la non portabilità del codice che hai scritto (e non da un'architettura ad un'altra, ma proprio da un OS ad un altro).

Scriversi tutto e non utilizzare librerie sarebbe come prendere un auto e levare tutto, come la leva del cambio, il volante, i pedali... e per sterzare agire con una chiave direttamente sull'asse delle ruote.

Secondo me quello che hai scritto è generalizzato.
Chi ha creato ogni linguaggio ha deciso anche come doveva essere la sintassi.
Es. il creatore di Python nonsi è ispirato al C per quanto riguarda le parentesi graffe. Non ha messo la funzione main o int main. Non ha incluso librerie etc.. Questo dimostra qualcosa.

Il creatore del C non si è ispirato a Pascal e tra l' altro ha scritto i motivi per cui non gli piace questo linguaggio.
anche io ho tutto il diritto di scrivere i motivi per cui non mi piace il linguaggio C, senza offendere e senza mancare di rispetto.

Se dico che per dei motivi a me non piace il linguaggio C, rispettando le opinioni degli altri e senza imporre il mio pensiero a nessuno, non offendo e non manco di rispetto a linguaggio e ai suoi creatori.

Che cosa dimostrerebbe l'assenza di "int main"? E che vuol dire che non ha incluso librerie? https://docs.python.org/3/reference/import.html

Prima invece i sistemi operativi venivano scritti solo in Ams. Poi dopo per le parti non critiche veniva utilizzato il C. Poi il C ha preso ancora più piede ma ci sono delle parti in Asm.
Altri linguaggi sono stati utilizzati per creare sistemi operativi. Es. il Pascal. Il successo di un linguaggio di programmazione rispetto ad un altro non credo che riguarda questo discorso.

Non si tratta di mancare di rispetto ai creatori del linguaggio, o a chi apprezza il C. Sono proprio le argomentazioni, in generale, che vacillano...
C è adatto alla programmazione di sistema.

Le parti in asm sono una minima parte, e si tratta di codice inline, scritto da C/C++; e per essere più precisi si tratta di parti delicate come push/pop di registri e context switch, o altre operazioni simili e non realizzabili (o meno convenienti) con linguaggi differenti da asm.

Come ho ripetuto sopra nei post precedenti, e com'è stato ricordato da un altro utente, ciascun linguaggio è nato per una ragione e la scelta da parte del programmatore dovrebbe essere dettata dalle necessità.
Quando si deve iniziare, è un altro discorso.

Riprendo anche io la domanda di rctimelines, ed a mia volta te la pongo, per mia curiosità :)

Sinceramente, hai scritto dei programmi in assembly? Che non sia hallo world copiato da Wikipedia? Per fare cosa?
 
U

Utente 125751

Ospite
Eh no stanno proprio così https://stackify.com/popular-programming-languages-2018/

"C is also the most popular language for embedded systems in cars, electronics, and other devices"

Ad oggi comincia a muoversi qualcosa, con i vari micropython e javascript più o meno castrati per stare nei limiti dell'hardware embedded.

Ho letto il sito e c'è scritto quello che hai indicato però bisognerebbe vedere altri siti.
Però l' embedded non riguarda questa discussione e ne voglio fare l' errore di mettermi a cercare altre cose, visto che già ho troppa carne sul fuoco ed pure la confusione in testa.

Semplicemente non si usa. Funzioni annidate? No grazie, non le uso.

Mai sentite nominate questo tipo di funzioni quindi non lo so.

Ti dico semplicemente che non puoi. Non hai il know-how per realizzare una cosa del genere. E per acquisirlo dovrai per forza di cose studiare vari linguaggi e diventarne un discreto utilizzatore, cosa che potrebbe aprirti gli occhi sulla futilità di creare un linguaggio nuovo per sole ragioni estetiche.

Non pensavo che anche modificare un pochino un compilatore fosse così complicato.
Per me è come se uno deve modificare solo un piccola parte di un programma. Mi piacerebbe sapere a livello generale perchè.

Però ho deciso di lasciar perdere e quindi non mi metterò a modificare, nemmeno un pochino il compilatore.

Pessimo approccio. Mi sento di suggerirti quanto già scritto da rctimelines. Non puoi pretendere di imparare a programmare spiluccando qua e là sul web. Occorre uno studio serio e decine di migliaia di ore di pratica.

Non pretendo di imparare a programmare in quel mondo e non mi interessa imparare a programmare.

Voglio modificare questo approccio sbagliato che ho.

Per l' assembly sintassi Intel sto cercando di stabilire un percorso, un metodo e di trovare tutto il materiale consigliato (no disinformazione) che mi possa servire. Inizio prima ad imparare l' architettura visto che è importante. Poi dopo verrà il linguaggio.

Per imparare una cosa io trovo utile che qualcuno la spieghi. Una volta fatto questo poi si passa al/ libro/i o/e alle dispense.

L' importante è non andare a sinistra e a destra per i siti web, forum, guide, libri etc... a leggere a pezzi perchè se no è un disastro.

Per quanto riguarda un linguaggio ad alto livello ora non ancora non iniziato. Sto cercando, sto vedendo, sto leggendo, sto dando un occhiata.
Ecco perchè avevo chiesto un linguaggio simile o quasi a me da imparare.

C'è un linguaggio che si trova in mezzo tra l' assembly (non quello puro) ed il C?

Sto valutando ad es., HLA, Pascal e REXX.

E allora scordati di modificare un linguaggio o crearne uno tuo. Programmare un semplice software è fattibile anche per chi è a digiuno di teoria, ma pensare di fare lo stesso con un linguaggio è impossibile. C'è una quantità disumana di teoria ( oltretutto roba matematica di altissimo livello ) dietro un linguaggio, compilatore o interprete.

La risposta si riferiva al fatto che mi avevi detto, prima, che ero interessato ad imparare solo la teoria in particolare le nozioni.

Io ho sempre detto che non sono nemmeno immaginare a crearmi un linguaggio tutto mio ed il relativo compilatore.

Riguardo alla modifica di un linguaggio ed il relativo compilatore intendevo un pochino o un po' in maniera tale che fosse meno complesso e che mi permettesse di rendere un pochino/un po' sopportabile ad es. il C o il Pascal o il Quick Basic o il Cobol.

Ripeto: lascio perdere la modifica del compilatore.

Ma il punto è che intendi per modo di pensare o ragionare. Come dicevo LISP è il più flessibile dei linguaggi ad oggi esistenti e tramite le macro consente di creare costrutti di programmazione arbitrari. In questo senso può essere plasmato per avvicinarsi al proprio modo d'interfacciarsi ma i problemi. Ma in generale si usa questa caratteristica per rendere il linguaggio più adatto ad affrontare il tipo di problema da risolvere. Riguardo il modo di pensare del programmatore, è lui a doversi adattare sia al linguaggio sia al problema.

Forse è meglio se farò un esempio.

Anche per quello che hai detto per il Lisp ci sono cose che non so, es. la programmazione arbitrari.

Riguarda all' ultima frase. Chi ha creato un suo linguaggio, (es. quelli che ho menzionato prima) indicano che la cosa è soggettiva e dipende dal linguaggio in questione.

No. Pascal non ha nessuna rigidità. Pascal offre un modello di programmazione come fa qualsiasi altro linguaggio. E' rigoroso, non rigido.

Con rigidità intendevo rigoroso. Ho sbagliato termine.

Il C veniva/viene utilizzato di più rispetto al Pascal anche per altri motivi oltre al fatto che non rigoroso quando il Pascal? Sto prendendo informazioni su Pascal.
La domanda è riferita ai pc, server e workstation.

Per Pascal non intendo Delphi oppure Object pascal.

I .h sono header file non librerie. Gli header file esistono in C e C++ allo scopo di indicare la struttura delle funzioni presenti in una libreria esterna, affinchè un programma possa utilizzarla.

Anche leggendo la bibbia del C seconda edizione, avevo capito male.
Ora ho capito.

Pure la stragrande maggioranza dei processori e dei microcontrollori usati nell'embedded sono general purpose.

Ovviamente i processori sono tutti general purpose.
I microcontrollori però non vengono utilizzati per il general computing.

Passiamo avanti XD.


ok.

Il tutto senza però voler conoscere prima il C? Come dire che uno decide di modificare una BMW senza conoscere come sono realizzati i motori BMW.
Si, è estremamente complesso e richiede una conoscenza profonda del linguaggi che si andrà a modificare e dalla codebase del compilatore su cui mettere le mani.

Assolutamente no. Senza imparare il linguaggio di programmazione che si vuole modificare non si va da nessuna parte.

No, ma tutte le funzionalità che i vari linguaggi hanno, che stanno introducendo o che introdurranno nei prossimi anni, esistono già in LISP. La programmazione funzionale è cosa nota da decenni nel mondo LISP, ma è novità assoluta nel mondo dei linguaggi mainstream.

Capito. Non so se mi devo preoccupare per questo cambiamento che ci sarà.

Ma mi pare di capire che tu non vuoi avere niente a che fare con linguaggi che ritieni inadeguati. Oltretutto li giudichi dopo averli usati per quanto tempo? Un linguaggio è un'entità complessa ed occorrono mesi ( per i più semplici ) per comprenderne la logica.
Appunto. Sono troppe le cose che non conosci per poter esprimere giudizi su linguaggi e modelli di programmazione. Non sarebbe opportuna studiare con umiltà le basi, poi fare pratica con un certo numero di linguaggi e magari solo dopo tirare le somme? Quello che voglio farti capire è che ad oggi non hai gli strumenti minimi per poter arrivare ad una conclusione. Stai mettendo il carro davanti ai buoi.

Io come ho scritto più volte sto cercando un linguaggio di programmazione da imparare, ho indicato le caratteristiche che dovrebbe avere ed ho espresso delle opinioni (non giudizi) in maniera tale che avesse tutte le informazioni necessarie per potermi aiutare e consigliare.
Questo linguaggio come tutti avrà i suoi contro però

Te poi mi avevi fatto delle domande, perchè volevi ulteriori spiegazioni ed io ti ho gentilmente risposto.

Ho pure scritto il mio percorso dal 2014 per quanto riguarda la programmazione spiegando quello che è successo in maniera tale da avere consigli visto che non vorrei mollare un altro linguaggio o addirittura mollare la programmazione per dedicarmi ad un altro interesse :(

Es. alla fine Python mi annoiato, gli esempi semplici mi annoiavano ed gli if, elife else etc... dopo un po' erano ripetitivi e mi ero stufato :(
Stessa cosa è successa anche con Qbasic.

Certo che un linguaggio è una lingua, formale e matematica ma sempre lingua è. E ogni lingua è creata per esprimere determinati concetti in maniera non ambigua, efficiente e completa. Ma questo significa che il rapporto esiste tra linguaggio e problema, non tra linguaggio e mentalità del programmatore. Quest'ultimo deve studiare, capire entrambe le entità e sfruttare il linguaggio per risolvere al meglio il problema. Cioè il programmatore dev'essere flessibile, non può irrigidirsi e buttare a mare linguaggio dopo linguaggio solo perchè non gli piace.

La sintassi è francamente questione di lana caprina. Non stiamo dipingendo quadri, stiamo creando opere ingegneristiche. La semantica è questione più significativa, ma una semantica inadeguata ti porta solo a fare il giro più lungo, ma siccome i linguaggi comuni sono tutti Turing completi, comunque ti consentono di implementare la soluzione per qualsiasi tipo di problema.

Invece secondo me il rapporto che esiste dipende da persona a persona, considerando anche che non esistono nel mondo solo i programmatori, dipende anche dal tipo linguaggio ed anche dalla sintassi che c'è.

Esistono anche altri motivi oltre al "non gli piace".

Io come ho scritto più di una volta, non sono un programmatore e non ragiono come un programmatore :)

Secondo me esiste sia il rapporto tra mentalità/personalità della persona ed il linguaggio e il rapporto tra la mentalità/personalità della persona e quello che sta programmando/quello che deve fare.

Solo in determinate condizioni/situazioni c'è il problema.

Concordo sul fatto che la semantica è più significativa.

Mi hai fatto ricordare che esiste una materia chiamata ingegneria del software e serve ad es. per grandi/grandissimi progetti.

Es. per l' assembly ci cose che non mi stanno bene/che vanno contro al mio modo di pensare però ci sono dei motivi positivi che mi spingono ad andare avanti, ad abituarmi, ad impararlo compresa anche la relativa architettura.

Sintassi nel campo dei linguaggi formali ha uno specifico significato. Nel caso di LISP si parla di s-espressioni e il linguaggio non fa differenza tra statement, espressioni, dati e codice.

Non ho presente lo statement in questo momento.

Tipo convertire il tutto in C e poi compilarlo con un compilatore C tradizionale. Oppure usare ( cosa che fanno tutti i linguaggi moderni ) un'intermediate representation. I compilatori tradizionali invece usano gli AST. In ogni caso nessuno trasforma istruzioni mnemomiche direttamente in codice macchina ( tranne l'assembly ).

Per quanto riguarda la prima frase credo che sia quello che mi ha consigliato "RTCtimelines" e la cosa mi interessa. Si può invece convertire il tutto in Pascal oppure in Gw Basic o in Cobol e poi compilarlo con il loro rispettivo compilatore?

Perchè hanno l' intermediate representation e non l' assembly? Che vantaggi/svantaggi ci sono?

Poi sono indeciso se trasformare il programma 1 che avrò creato, usando un mio linguaggio, in assembly oppure in IR di un programma creato con un mio. Non so il livello di difficoltà. Vale anche a livello didattico.

A fine didattici e per smettere di credere alla magia pensavo di convertire qualsiasi programma in C oppure in Pascal oppure in Quich Basic oppure in Cobolo in IR per vedere il passaggio intermedio. Quant' è il livello difficoltà?

Ma non si chiama variabile, perchè non porta appiccicate informazioni sul tipo dei dati. La variabile assembly è un alias di un'area di memoria, cioè una stringa che viene trasformata in fase di assembling in un numero che indica una locazione in memoria.
Perchè non esiste il concetto di tipo di dato in Assembly.
E Assembly? Perchè non sarebbe astratto? Ma dopotutto tutto quello che gira in un computer è astratto, visto che non si tratta di oggetti fisici. Come vedi certi termini non hanno alcun significato nell'ambito informatico.

Intendi la memoria ram?

Il Pascal è un linguaggio astratto rispetto a quello macchina.
Nel caso del computer ci sono vari livelli di astrazione.

Chi fa un linguaggio in genere non lo crei in modo che possa girare solo su x86.

Non sono informato sulle statistiche.

Il che sarebbe una follia.

ok

No. C'è la libreria standard che è inclusa automaticamente, anche dai compilatori C. Le altre sono a carico del programmatore.

La libreria standard del C, se ho capito bene contiene meno firme delle funzioni visto che che le altre sono contenute negli altri header file che bisogna includere nel programma.

E possibile inserire il contenuto degli header file piu utilizzati in assoluto all' interno della libreria standard del C?
Quanto sarebbe la difficoltà? Non mi interessa fare una cosa del genere ma lo chiedo solo per curiosità.

Lo vedi che ti mancano le basi? Perchè cerchi di risolvere un non problema con una furbata? Un header file contiene sono le firme delle funzioni e poco altro. Il codice sta altrove. E questo codice potrebbe include altro codice ( tramite il meccanismo del linking ) presenti in altri file e librerie. Quindi che fai? Vai in giro a copia-incollare roba? E per risolvere cosa? Levare un paio di #include?

Ho ancora molto cose da imparare. In questo caso non voglio risolvere un non problema. Hai frainteso.
Volevo solo imparare e capire a livello didattico il contenuto di determinati header e a scrivere quello che serve direttamente nel programma ma solo all' inizio per fini didattici e per fare pratica.

Premesso che in stdio.h non c'è il codice ( come già detto sopra ). Ma poi perchè tutta? Se usi una funzione ti serve una funziona non tutte le millemila che ci sono nella libreria standard.

Quello che c'è scritto nel file stdio.h se ad es. viene copiato all' interno del programma serve tutto oppure una parte che varia a seconda del programma che si scrive? E' per curiosità e per fini didattici.

Veramente era per semplificare la vita dei programmatori e rendere possibile la creazione di software più complesso.

Vero.

Non saltare di sito in sito. Hai idea di cos'è una sycall? Ecco, quel programma usa le syscall direttamente. E poi perchè fissarsi con questa cosa della lunghezza? Che poi il programma Assembly che hai postato usa i servizi del DOS per visualizzare del testo. Un tipico programma C usa una serie di funzioni offerte dalla libc, che è creata in modo da poter girare su vari OS. Il programma C che hai postato richiama le system call di un non meglio specificato sistema operativo. Cioè stai confrontando pere con ananas. Che senso può mai avere una cosa del genere?

Non conosco syscall. Spinto dalla curiosità di sapere ed imparare come fosse un programma Hello world in C senza includere le librerie ho fatto una ricerca e mi sono apparsi un po' di risultati tra cui quell' programma scritto da un utente.

Non credo che sia stata una buona idea linkare questo programma con sycall visto non so c'è.

Il fatto della lunghezza non è una fissazione ma è solo un dubbio/curiosità che ho. Nulla di più :)

Invece un programma in C su Ms-dos 6.22?

No, gli assembler non includono niente automaticamente. Ma queste perchè l'Assembly non è un linguaggio dotato di una libreria standard.

Meno male^^

No, non è così. Non è meno difficile, fa un'altra cosa. Il preprocessore è quello che trovi in C/C++ e che, tra le altre cose, si occupa dell'espansione delle macro. Riprendendo il tuo codice precedente:
Il preprocessore espande quelle #define, che sono solo delle "etichette", trasformandolo in:

Però nel primo programma c'è già scritto quello che hai scritto nel secondo programma.

Ma poi: perchè scrivere un programma che converta da linguaggio X ad assembly? Posto che è completamente inutile, è anche complesso; se il linguaggio X è ad oggetti, che fai? Per non parlare del modo in cui scegliere registri e/o memoria...
Inoltre il compilatore, tra le tante cose, ottimizza il codice prima di generare il codice macchina. E' più ottimizzato il codice di un compilatore (specialmente utilizzando opportuni flags) rispetto a quello generato da un assembler e scritto da un programmatore.

E' più facile scrivere un programma che converta un programma, scritto nel linguaggio X, in assembly piuttosto che in codice macchina?

Pensavo che fosse più facile e poi per capire/imparare come si passati dall' assembly ad un determinato linguaggio ad alto livello.

Capire il tutto, che significa?

Intendo il passaggio dall' assembly ai linguaggi ad alto livello.
Oppure il passaggio tra il binario e l' assembly oppure il passaggio tra i linguaggi ad alto livello ed il codice macchina.
Ora scopro che c'è anche IR quindi anche questo mi interessa.

C++ è C-like, così come Java, C# ed altri ancora.
Partire dall'elettronica non è tutto. L'elettronica è utile per avere alcuni fondamenti, e questi vanno appresi - normalmente - prima di assembly stesso. Stesso discorso per le basi di numerazione. Dovessi anche studiare il Millman, non implicherebbe facilità nell'apprendimento di assembly o di altri aspetti collegati alla programmazione.

Capito.

Se hai trovato subito ostacoli, significa che hai fatto il passo più lungo della gamba. Non è una buona idea, se non si conosce la programmazione, partire direttamente da assembly.

Avevo trovato ostacoli* Poi ero ritornato ad un linguaggio ad alto livello.

Inoltre lascia che mi ripeta: va bene studiare asm 8086 per iniziare ad avvicinarsi ad asm e prendere un pò di confidenza con il linguaggio; tuttavia scrivere programmi per 8086 seri, al giorno d'oggi, e che girano su DOS, va ben oltre l'inutilità. Riguardati l'esempio che ti ho mostrato sopra.

C'è anche l' architettura Pre X86. Ad es. l' 8008 è es. è più semplice anche a livello di architettura, anch' esso mi interessa ed ho un progetto per il futuro. Ho trovato l' emulatore su internet e stessa cosa per l' Intel 4004. ^^

Ho visto l' esempio sopra su Masm32.

Per concludere, nel caso dell'hello world in C, il compilatore (GCC, usando MinGW), genera questo:

Codice:
CPU Disasm
Address   Hex dump          Command                                  Comments
004013C0  /$  55            PUSH EBP                                 ; helloworld.004013C0(guessed void)
004013C1  |.  89E5          MOV EBP,ESP
004013C3  |.  83E4 F0       AND ESP,FFFFFFF0                         ; DQWORD (16.-byte) stack alignment
004013C6  |.  83EC 10       SUB ESP,10
004013C9  |.  E8 42060000   CALL 00401A10
004013CE  |.  C70424 643040 MOV DWORD PTR SS:[LOCAL.4],OFFSET 004030 ; /format => "Hello World!"
004013D5  |.  E8 A6080000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004013DA  |.  B8 00000000   MOV EAX,0
004013DF  |.  C9            LEAVE
004013E0  \.  C3            RETN

e come puoi vedere usa la funzione printf di MSVCRT.

Come mai il compilatore converte in assembly?

Cos'è MSVCRT?

L' Asm è a 32 bit?


Però non è che gli autori dei linguaggi li scrivano "a sentimento". Un nuovo linguaggio nasce per risolvere un problema ingegneristico importante e sentito. Rust, ad esempio, è nato per consentire la scrittura di codice nel quale siano assenti alcune classi di bug.

La riguarda alla prima frase si riferisce tipo ad un poeta.

Per quanto riguarda la seconda frase, secondo me, dipende da persona a persona.

Ci sono diversi motivi per cui è nato Rust.
Giorni fa avevo visto questo linguaggio. Ora non vado a cercare su google perchè se aggiungo altre carne al fuoco, altre info insieme ad altra confusione.

Per curiosità, quali sono? A parte gli header file.

A parte 1 forse 2 gli altri li ho scritti nel corso della discussione e tu mi avevi pure risposto.

Riguardo agli header file quelli mi vanno bene da quando mi hai spiegato che i linguaggi come Quick Basic, Python, Cobol e Pascal includono forzatamente una libreria standard che comprende tutto il necessario ed inganna chi va a programmare.

Pure la matematica risulta fastidiosa e richiede sforzo. Però poi ne vale la pena.

Certe argomenti mi piacciono della matematica.
Questa frase non si applica nel mio caso con il linguaggio C o in altre cose.
Però nel mio caso ad es. si applica per altri linguaggi.

"Esistono due tipi di linguaggi: quelli di cui tutti si lamentano e quelli che nessuno usa", Stroustrup, creatore del C++. Non esiste un programmatore che ama ogni singola caratteristica di un dato linguaggio.

E se ti dicessi che si può rendere C# o Java o anche Python vicini all'hardware?

Ed è questo che ti sta fregando.

Lo so.
Voglio avere una scaletta, un metodo ed un percorso ^^

Ci vuole pratica per capire certi argomenti, ma bisogna scrivere programmi per fare pratica e ci vuole una buona conoscenza degli algoritmi e delle strutture dati per scrivere programmi.

La struttura dei dati e gli algoritmi riguardano l' assembly sintassi Intel il Pascal, il Quick Basic ed HLA?

In passato ci avevo dato più volte una letta ma non c'è l' ho mai fatta a continuare.
Poi non so se magari c'è un approccio meno teorico.


Ma il resto che hai citato rientra nell'ambito della programmazione e quindi https://www.amazon.it/Introduzione-agli-algoritmi-strutture-dati&tag=tomsforum-21[/QUOTE]

Il primo libro c'è l' ho :)

Non ho capito cosa c' entrano gli algoritmi e la struttura dei dati sul capire come si è passati dalla sintassi del linguaggio assembly a quella di uno dei linguaggi alto livello anni 70/80.

Sbagli. Modificare un software di quella complessità richiede l'averne studiato e compreso l'architettura e quindi letto il codice. In molti casi scrivere un software da zero è più semplice.

Sbaliando si impara. Ho capito quello che hai scritto.

Se hai quest'intenzione, allora serviti di LLVM. Ma ritorniamo sempre alle solite, cioè non hai le basi per poter fare una cosa del genere. E il C e C++ sono dei must know per questo genere di attività.

https://www.amazon.it/Compilers-Principles-Techniques-International-Economy&tag=tomsforum-21

https://www.amazon.it/Linkers-Loaders-John-R-Levine&tag=tomsforum-21

Inoltre stai mettendo troppa carne al fuoco. Se fai il saltimbanco ti confondi solamente. Scegli una tecnologia ed esplorala a fondo. Ti piace l'embedded? Bene microPython o Espruino. Ma ancora meglio compra una board Raspberry e programmala in Python. Hai bisogno di conoscere praticamente queste tecnologie, non basta leggere articoli e blog post. Bisogna fare.

Grazie per i libri ^^

Al posto del C/C++:

L' assembly?
Rust?
Pascal?
Basic?

Se scelgo un linguaggio alto livello vorrei almeno capire a livello generale come la sintassi sia arrivata a quel punto partendo da quella Intel dell' assembly,

"In matematica non esistono vie regie", Euclide. Per l'informatica vale lo stesso.

Ok, però disse geometria e non matematica.

E hai sbagliato. Non devi saltare di palo in frasca e non devi abbandonare al primo ostacolo.

Lo so che ho sbagliato.
Per quanto riguarda ad es. Python e Basic non ho avuto ostacoli. Alla fine mi avevano stufato ed annoiato. Successivamente li avevo ripresi, forse per togliermi lo sfizio, e poi per stessi motivi li ho rilasciati perdere :(

Altrimenti perchè sono stati inventati altri linguaggi?

Perchè svariate persone non sono riuscite ad abituarsi all' assembly :D

Decisione sensata. Ma devi fare pratica.

Straquoto.

Appena arriverò al linguaggio chiederò consigli sulla pratica. Non voglio fare solo gli esercizi proposti dai libri o dai 3 siti web consigliati.

Pensi che l' architettura 8008 sia più facile per me? Mi piace anche quella Pre X86 ed il relativo assembly ed ho un progetto futuro da realizzare.

Non so se fare tutte e due le cpu (8008 e 8086) oppure prima una e poi l' altra. L' 8080 è più complicato dell' 8008.
 
Ultima modifica da un moderatore:

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Vedo che continui ad ignorare i miei commenti: non sono interlocutore privilegiato (per fortuna).
In questi discorsi deliranti con cui stai portando a spasso gli altri utenti nei tuoi territori della fantasia, hai toccato alcuni punti che mi interessano.

Secondo me confondi troppo l'analogia tra il linguaggio umano e un linguaggio di programmazione. Si, sono linguaggi entrambi e servono per comunicare, ma l'analogia invocata dal termine "linguaggio" ad un certo punto si ferma!

Una delle espressioni più assurde che usi è quando dici che ti stai documentando (leggendo libri in PDF, ci tieni a sottolineare che non li compri) per trovare un "linguaggio che assomigli a te e almtuo modo di pensare"!
A parte che è un requisito che non può esistere, oltre che nessuno cerca in un linguaggio di programmazione.. ma tu ritieni che l'italiano rispecchi il tuo modo di pensare e quindi è per questo che ti va bene? Altrimenti parleresti inglese, turco, arabo o una lingua da te inventata che capisci solo tu?

Poi mescoli, l'ho già detto, ogni tipo di linguaggio nei tuoi discorsi, sei ossessionato da C e assembly, pur non sapendo di cosa si tratti precisamente, ma li nomini sempre, poi aggiungendo Pascal e Quick basic (che è un'implementazione compilata Microsoft molto tarda, è come se invece di Pascal dicessi Borland Turbo Pascal) e qualche volta ci aggiungi il COBOL (mah!).. se il COBOL rappresentasse il tuo modo di pensare saresti da internare in tempo zero!

Tra i vari linguaggi inutili che hai ipotizzato potrebbero interessarti ora sei passato da Assembly x86 a quello per 8008.. praticamente una delle prime CPU, in disuso già alla metà degli anni 70.. circa 50 anni fa! Sicuramente sarà più semplice da capire, considerando che avrà qualche decina di istruzioni.
Poi hai nominato l'altrettanto inutile 8080, che però è ben più evoluto e qui, ti consiglierei vivamente allora di dare un'occhiata allo Z80! Una CPU simile all' 8080 (progettata e prodotta da Faggin, che aveva già progettato quelle Intel) ma di larghissima diffusione e utilizzata come controllore anche negli anni 90. Secondo me quello potrebbe darti soddisfazioni, è stata la prima CPU su cui ho giocato e anche lavorato, lo conosco alla perfezione.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

pabloski

Utente Èlite
2,868
916
Non pretendo di imparare a programmare in quel mondo e non mi interessa imparare a programmare.

Hai aperto un thread su programmazione, C, assembly, embedded, computing e non t'interessa programmare? Cioè pretendi di studiare a memoria un certo numero di libri e concludere che hai capito tutto? Onestamente non capisco qual è il tuo obiettivo.


Comunque Art of Assembly, lo leggi, lo segui, realizzi programmi e avrai un'idea molto precisa del funzionamento a basso livello dell'architettura x86. Oppure ancora più semplice e didatticamente valido "Programming from the Ground Up". E' per Linux, quindi devi installarti Linux in dual boot, su un pc di comodo, in una macchina virtuale. E' pure disponibile gratuitamente https://download-mirror.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf

Ma ripeto, se parti con "non mi interessa imparare a programmare", francamente non so dov'è che vuoi andare a parare.
 
U

Utente 125751

Ospite
@rctimelines

Io non ho mai ignorato i tuoi commenti e ti ho sempre risposto.

Prima del commento che hai scritto alle 15:56 c' erano gli altri commenti di chi ha postato prima di te a cui volevo/dovevo rispondere.
Dopo le 15:56 hai postato un altro post. Poi c'è stato il post di Mursey (16:31), quello corto di Pabloski (15:57) etc... e nemmeno a questi ho potuto rispondere. Quando avrei potuto rispondere, avrei iniziato con il tuo messaggio (15:56) dato che avevo risposto all' ultimo messaggio scritto da un altro utente, prima di te. Dopo il tuo avrei risposto anche a tutti gli altri in ordine per quanto riguarda l' orario in cui sono stati postati. Basta che vai a vedere/controllare i messaggi per verificare se quello che ho detto è vero oppure no.

Io non mi sono mai assolutamente paragonato alla preparazione teorica, pratica ed alle competenze delle varie persone che ho citato che avevano creato uno o più linguaggi di programmazione. Come ho scritto più volte molte cose non le so e sono un neofita.

Per me, sulla sintassi dei linguaggi di programmazione non esiste solo il mi piace e non mi piace. E comunque anche sull' estetica di un linguaggio, compresa la sintassi, c'è un lavoro che è stato svolto da chi ha creato quel determinato linguaggio di programmazione.

I miei discorsi non sono deliranti. Quello è un tuo pensiero e mi fa capire che fin' ora non ti è mai capitata, e per fortuna, una persona che fa veramente discorsi deliranti.
Io non ho territori della fantasia :boh:

Io non ho mai scritto che questo linguaggio deve assomigliare a me.
Non hai capito qual'è il mio modo di pensare/ragionare che ho nei confronti della programmazione e dei linguaggi di programmazione.
Hai confuso il mio modo di ragione/pensare che ho nei confronti dei linguaggi di programmazione/della programmazione con quello che ho nei confronti delle lingue e quindi dei linguaggio umano.

Per me, tra un linguaggio umano ed un linguaggio di programmazione ci sono delle differenze e non Solo delle analogie.

Per puro caso su slack ho trovato questo link:

https://francescocirillo.com/pages/anti-if-campaign

Non sono il tipo che si mette a creare campagne per queste cose o/e che le segue. Stessa cosa vale se la campagna fosse a favore dell' if.
Questo campagna mi fa capire che perfino sull' if statement ognuno la vede diversamente.

Ho modificato il programma in C che ho postato all' altro giorno:

C:
#include <stdio.h>

#define IN  1    /* inside a word */
#define OUT 0    /* outside a word */


  /* count lines,words, and characters in input */

int main()
          {
              int c,n1,nw,nc, state;
              state=OUT;
              n1=nw=nc=0; 
              while ((c=getchar() )!=EOF) ++nc;
              if (c=='\n') ++n1;
              if (c=='  ' || c=='\n' || c=='\t') state=OUT;
              else if (state==OUT)
              state=IN;
              ++nw;             
              printf("%d %d %d\n",n1,nw,nc);
                                                                                     }

A parer mio: è impostato meglio ed è più leggibile.
L' ho compilato più di una volta e non ci sono errori. Alla fine il programma funziona senza problemi.


Nel corso della discussione sono dovuto andare a leggere e acercare da un sito ad un altro etc... da una discussione di un forum ad un altra etc..., da un libro o/e dispensa ad un' altro/a etc... etc.. per potervi fornire tutte le informazioni necessarie affinchè mi poteste consigliare questo linguaggio di programmazione e poi per poter capire come determinate cose che avete detto affinchè potessi rispondervi al meglio. Ho fatto diverse domande perchè ho voglia di imparare e sono una persona curiosa.

Faccio come minimo svariati errori e ci sono delle cose che ho imparato sull' assembly e sul linguaggio C. Poi in questa discussione ne sto imparando altre grazie a chi ha postato fin' ora. Certe cose non le ho capite ma perchè non ho il livello tecnico adatto ma
Non sono bravo a spiegare svariati argomenti tecnici sulla programmazione perchè non sono ancora arrivato a livello adatto e poi un conto e sapere le cose ed un/ altra cosa saperle spiegare ed insegnare.

A parte il programma Gw basic del primo post, di questa discussione, ed in passato il programma l' Hello word in C e quello in C++ non ho copiato altri programmi da Wiki.

Il mio primo programmino in asm che avevo creato è stato questo:

.MODEL Small .STACK 100H .DATA Var1 DB 4 Var2 DB 2 Somma DB ? .CODE .STARTUP MOV AL,Var1 ;copio Var1 in AL ADD AL,Var2 ;sommo Var2 in Al ADD Somma,AL ;copio il valore di Pino in Somma MOV BL,Somma MOV AH,4CH INT 21H ;restituisco il controllo all' Ms-dos END ;termino il programma

Il secondo l' ho postato in una delle risposte sopra tramite immagine.

Ne ho iniziato un altro e non manca molto alla fine. Quando lo finirò lo posterò.

Diverse settimane fa, decisi di riprendere con l' assembly 8086, la sua architettura e dall' altra c'è anche l' interesse verso l' assembly e l' architettura Pre-X86, la voglia di imparare ad es. l' architettura e l' assembly dell' 8008. Ho menziato più volte in questa discussione anche l' assembly e l' architettura Pre-X86 proprio per questo motivo.
Le cpu che ho menzionato a parer mio non sono affatto inutili. Quando ho scritto che l' 8080 è più complicato mi riferivo sia alla sua architettura che al suo assembly. Era sottinteso che per questi motivi attualmente non mi interessa e . In un futuro non prossimo si vedrà visto nella mia lista c'è l' 8080, lo Z80 ed altre cpu d
Pensavo di fare una scaletta, di avere un metodo e di finire di selezionare il materiale consigliato.
Pensavo all' inizio di partire ad imparare l' architettura dei calcolatori che è fondamentale e alle architettura dell' 8008 e dell' 8086 che sceglierò. Non voglio mettere troppa carne sul fuoco.
Una volta fatto questo pensavo di passare al linguaggio assembly sintassi Intel relativo alle due cpu menzionate. Seguirò anche qui un metodo, una scaletta ed un percorso.

Tralasciando REXX, su cui volevo informazioni da qualcuno qui, tutti gli altri linguaggi che ho nominato non sono inutili, per me, considerando soprattutto che questa discussione non riguarda il mondo del lavoro o/e la preparazione per entrare nel mondo del lavoro.

Riguardo al Quick Basic Pabloski mi ha detto, se non ho capito male, che è un linguaggio compilato a differenza del Qbasic che invece è interpretato.

Io ho sempre fatto riferimenti solamente ai linguaggi che riguardano il discorso che stavo facendo in quel momento o/e che riguardavano la risposta che ha dato la persona a cui sto rispondendo. Questa cosa vale anche ora. Non mi metto a nominare i linguaggi di programmazione senza motivo.

Vorrei capire ed imparare:

1) le differenze tra i vari linguaggi imperativi, lasciando perdere la OOP, come ad es. assembly, HLA, Pascal, C, Basic, Cobol etc...

2)la differenza tra i vari paradigmi di programmazione tranne quello funzionale, quello logico, quello dichiarativo e quello OOP. Al momento ho individuato ad es. questi: non-strutturato, strutturato, modulato (programmazione modulare), procedurale, stack-oriented, reflective, concatenative

3) come si è passati dal binario o/e dall' esadecimale all' assembly puro Pre X86 ed X86-16 sintassi Intel o viceversa.

4) come si passati dall' assembly sintassi Intel ai linguaggi che ho menzionato o viceversa.

5) come si è passati dall' assembly puro all' aggiunta (o modifica) delle varie direttive del TASM nel corso delle sue diverse versioni o viceversa.

6) come funziona e che cosa fanno in particolare un assemblatore, un compilatore tradizionale, un compilatore LLVM ed un interprete. Al momento so solo che un assemblatore converte il linguaggio assembly in codice macchina, che un compilatore tradizionale converte il linguaggio ad alto livello in codice macchina etc...

7) come funziona e come si fa a convertire un programma scritto usando un mio linguaggio in un linguaggio compilato usando ad es. HLA, Pascal, C etc... Questa se non mi sbaglio è l' idea che mi avevi proposto sopra ed avevi detto che non è difficilissima.

8) Mi piacerebbe capire ed imparare Ms dos.

All' inizio mi va bene anche un quadro generale poi per il futuro si vedrà se vorrò approfondire oppure no.

Nel corso della discussione sono dovuto andare da un sito ad un altro etc... da una discussione di un forum ad un altra etc..., da un libro o/e dispensa ad un' altro/a etc... etc.. in maniera tale da fornirvi tutte le informazioni necessarie affinchè mi aiutaste nella scelta di questo linguaggio, in maniera tale che poteste capire cosa i e per poter capire come minimo svariate cose che avete detto mi sono dovuto mettere a fare ricerche su internet affinchè potessi rispondervi al meglio. E' stato un casino perchè sono e questo alcune cose me l' ha fatte imparare/capire ma dall' altra ha portato dubbi, frammenti di informazioni, confusione e stress. Poi dopo mano a mano che mi avete risposto mi è venuta anche la curiosità di sapere.

Riguardo al linguaggio di programmazione ad alto livello ancora non l' ho scelto. Mi sto informando un po'.

Lo facevo sul Commodore 64 all'inizio ma sia il linguaggio che il sistema erano troppo limitati.
Io volevo poter usare i sottoprogrammi e le funzioni quindi amavo il Simon's Basic.

Quindi sono passato a Visual Basic 6 e mi ha dato molte soddisfazioni.
Adesso sono su C# che sento una evoluzione naturale di quello che facevo in Visual Basic.

Non conoscevo il Simon's Basic. Ora ci vado a dare un occhiata.
Perchè dal Simon/s Basic sei passato a Visual Basic 6?

Potresti provare anche Visual Basic.net visto che hai fatto Visual Basic 6.


E ne approfitto perchè https://en.wikipedia.org/wiki/Simons'_BASIC

Da cui l'OP potrà notare come il Simon's Basic implementa delle keyword ( che poi sono funzioni ) che gestiscono aspetti che il Basic ufficiale del C64 non contemplava. Spero che questa riflessione lo aiuti a comprendere cos'è veramente un linguaggio e perchè qualcuno ha sentito il bisogno di crearlo.

Ti ringrazio per il link ^^
Mi interessa questa riflessione.

Si ma per ora un linguaggio è per te solo uno strumento. Man mano che lo userai capirai pure quali cose fa dietro le quinte.

Ecco questo mi ha fatto venire un dubbio. Ma non è che fino ad ora ti sei limitato a copiare codice da internet e il problema è che non riesci ad implementare soluzioni algoritmiche da codificare successivamente? Perchè se è così il problema è strutturale e non riguarda i linguaggi.

Non sono la stessa cosa? Per leggere cosa intendi esattamente? Tipo romanzo? Cioè non riesci a trasformare quello che leggi in nozioni che ti indirizzino successivamente durante la programmazione?

Già ora non vedo l' ora di imparare anche solo una parte di quello che c'è dietro le quinte. Però se il linguaggio ha un livello di astrazione maggiore rispetto all' assembly allora il dietro le quinte per me diventa, nell' immadiato, una cosa più importante.

Anni fà scrivevo codici (non copia ed incolla) presi da youtube in python, Qbasic, assembly etc... però non mi venivano idee su come creare programmini/programmi o magari altri esempi. L' unico obiettivo era imparare a programmare.

Successivamente uno dei programmi che mi erano venuti in mente, ma per necessità, era di poter spegnere in Ms dos 6.22 o 6.00 il pc premendo un tasto della tastiera oppure digitando un comando.

Ora riguardo all' asm ho dei programmini che mi sono venuti in mente da realizzare. Ad es. per Python e Basic non mi viene in mente nulla.

Per leggere intendo che: non bisogna leggere per 2/3 volte la stessa cosa a meno che non la si ha capita, non bisogna poi ripetere a voce quello che si ha letto oppure non bisogna fare i riassunti di quello che si ha letto.[/QUOTE]
 

pabloski

Utente Èlite
2,868
916
Anni fà scrivevo codici (non copia ed incolla) presi da youtube in python, Qbasic, assembly etc... però non mi venivano idee su come creare programmini/programmi o magari altri esempi.

Appunto. La questione è: "messo di fronte ad un problema, riesci a trovare la soluzione algoritmica"? Scrivere codice è relativamente facile, basta conoscere gli strumenti che si stanno usando. Il difficile è immaginare la sequenza di operazioni che insieme implementano la soluzione ad un dato problema.

Ora riguardo all' asm ho dei programmini che mi sono venuti in mente da realizzare. Ad es. per Python e Basic non mi viene in mente nulla.

Questa cosa mi lascia perplesso. Un problema è un problema e ha una soluzione algoritmica. Che poi venga codificata in Assembly, Python, Pascal, C o altro, è del tutto indifferente nella stragrande maggioranza dei casi. Se ti viene in mente un problema la cui soluzione potresti codificare in Assembly, cosa t'impedisce di provare a codificarla in un altro linguaggio?

Per leggere intendo che: non bisogna leggere per 2/3 volte la stessa cosa a meno che non la si ha capita, non bisogna poi ripetere a voce quello che si ha letto oppure non bisogna fare i riassunti di quello che si ha letto.

Nessun riassunto. In genere si legge, si capisce anche se solo parzialmente e poi si va ad implementare ed è quello il vero banco di prova.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
C:
#include <stdio.h>

#define IN  1    /* inside a word */
#define OUT 0    /* outside a word */


  /* count lines,words, and characters in input */

int main()
          {
              int c,n1,nw,nc, state;
              state=OUT;
              n1=nw=nc=0;
              while ((c=getchar() )!=EOF) ++nc;
              if (c=='\n') ++n1;
              if (c=='  ' || c=='\n' || c=='\t') state=OUT;
              else if (state==OUT)
              state=IN;
              ++nw;            
              printf("%d %d %d\n",n1,nw,nc);
                                                                                     }
Il programma non è affatto uguale al precedente. Qui il while è relativo solo all’incremento di nc. Poi esegue le condizioni su c (che ovviamente risulteranno false visto che c è necessariamente EOF). nw è poi incrementata.
Risultato quindi prevedibile: 0, 1, <numero di caratteri> che non è quello che il programma dovrebbe fare
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Molto esplicativo del tuo atteggiamento al limite del comprensibile è l'ossessione, oltre che per l'assembly x86, anche il fatto che dici di "voler imparare e capire ms-dos" .. insistendo anche sulla versione 6 e 6.22... ???
Posso capire che per curiosità tu possa dire di essere interessato alla storia di questo "sistema operativo" nonostante tu ne parli immancabilmente insieme a linguaggi di programmazione. Ma dal punto di vista della pratica ciò è assolutamente inutile e nemmeno particolarmente interessante.. ci sono voluti 10 anni per liberarsi di un os che ormai era diventato un mostro! Non capisco davvero cosa tu voglia imparare così approfonditamente, e che non ti porterà a nulla neanche come cultura personale.

Insisto anche sulla fissazione per x86, considerando che ci sono molte altre architetture altrettanto se non più interessanti.

Quali sono le ragioni di queste ossessioni? Non mi puoi dire che ms-dos e x86 sono più simili al tuo modo di pensare perché saresti da ricovero istantaneo!



Inviato dal mio Nexus 5 utilizzando Tapatalk
 

pabloski

Utente Èlite
2,868
916
Molto esplicativo del tuo atteggiamento al limite del comprensibile è l'ossessione, oltre che per l'assembly x86, anche il fatto che dici di "voler imparare e capire ms-dos" .. insistendo anche sulla versione 6 e 6.22... ???


Insisto anche sulla fissazione per x86, considerando che ci sono molte altre architetture altrettanto se non più interessanti.

Per MS-DOS credo abbia visto qualche listato in Assembly in giro e abbia letto del fatto che non implementa la modalità protetta, quindi lo vede come più bare metal degli altri.

Su x86 penso sia la popolarità, anche nei forum dedicati alla programmazione di sistemi operativi/bare metal.

Se però facesse due conti, sceglierebbe ARM, comprando una scheda come Raspberry e si cimenterebbe in questo https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/
 

Andretti60

Utente Èlite
6,440
5,091
Sinceramente seguo questo discorso solo per divertirmi :chupachup: Si e' partiti dal Basic (quello orignale) per arrivare a discutere il sesso degli angeli :)

Cibachrome, i problemi che hai sono dovuti al fatto che non hai abbastanza conoscenze di base, sarebbe come volere cambiare il motore di una auto senza sapere come costruire un motore. Vedi per esempi oquesta tua referenza:

...
Per puro caso su slack ho trovato questo link:

https://francescocirillo.com/pages/anti-if-campaign
....

L'articolo non dice che NON si deve usare il IF (ci mancherebbe ancora) ma come in certe situazioni sia molto meglio sostituirlo con metodologie OOP. L'esempio che fa e' classico, ed e' proprio un fondamento della programmazione a oggetti. Si definisce una interfaccia, dopodiche' si costruiscono diverse classi che la implementano. A seconda della situazione si utilizza una classe o un'altra, ma nel seguito le classi vongno viste solo attraverso la comune classe di base, per cui nessun IF viene richiesto. Ovvio che se NON si sa cosa voglia dire OOP (o se non se ne ha esperienza) si finisce con il non interpretare l'articolo correttamente.[/USER][/QUOTE]
 
  • Mi piace
Reazioni: rctimelines

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!