Caspita, non vedevo una discussione con post così lunghi da qualche anno penso. Avrei voluto rispondere questa mattina, ma purtroppo non mi era possibile.
Partecipo, giusto per dire la mia, e chiedo venia se mi ripeto quando magari ci sono già state risposte a qualche parte, ma leggere tutto il thread è difficoltoso... :D
Purtroppo, o per fortuna, è così. Lo smartphone che hai in mano (il processore, intendo) è più probabilmente un ARM che un Intel.
Le pile di codice di terzi sono tutte le API che andrai ad utilizzare quando programmerai. Che senso ha reimplementare, ad esempio, la printf del C (a parte scopi didattici)? Posto che in qualche modo dovrai stampare su console, o leggere/scrivere un file... e che quindi dovrai interfacciarti con un'API da qualche parte (magari con il sistema operativo stesso).
Semanticamente saranno anche diverse, ma in pratica la chiamata ad una funzione è una CALL che faresti in assembly. Le funzioni quindi esistono anche in asm, solo con meno livelli di astrazione; poi che non ci sia una corrispondenza tra CALL/RET... questo è vero.
Intendo dire che la CALL alla funzione A è 'solo' il cambio di indirizzo in IP/EIP/RIP ed un salto (visto il cambio di indirizzo) a quell'indirizzo. Quando avviene il RET, in teoria, ci potrebbe essere qualsiasi altro indirizzo in ESP e saltare quindi altrove.
Oltretutto una funzione ha comunque un prologo ed un epilogo. Quindi non condivido in toto questa parte.
[USER=125751]@Cibachrome[/USER] fatico un pò a comprendere questo attaccamento alla sintassi... sull'essere o meno strutturato, ho visto che ti hanno già risposto.
START è solo il punto di ingresso, è l'etichetta del blocco in questione. Normalmente il programma inizia l'esecuzione, ma come si fa con linguaggi ad alto livello, lo svolgimento è all'interno di altre funzioni (e file). Oltretutto gli esempi che riporti sono dell'8086 (16bit) e girano sotto al DOS; INT 21h, che è il vettore dei servizi del DOS.
Per fortuna le chiamate avvengono in maniera differente ora (non che interagire con la WinAPI sia comodissimo...).
Ni. Per amor di precisione: CMP, compare, effettua una sottrazione - ed il risultato viene scartato - e l'esito provoca un cambiamento di alcuni bit in EFLAGS. TEST è analogo, ma effettua una AND.
Poi si utilizza solitamente una delle tante istruzioni di salto condizionato, che leggono bit specifici e decidono se "jump is taken" oppure no.
Comunque [USER=125751]@Cibachrome[/USER] visto che mi è parso di capire che non hai mai affrontato la programmazione... scegli un linguaggio che ti interessa, ed inizia a studiare (oltre che a far tanta pratica). Quando ne conoscerai bene uno, apprenderne altri - anche se meno bene - non sarà così complesso. La parte più importante rimane in ogni caso la mentalità, il modo di pensare (come ho già detto in altri interventi più e più volte), la capacità di risolvere problemi.
Più sopra, non ricordo bene in quale post, ho visto che sei un tipo che passa alla pratica e che non ama molto la teoria. Permettimi di dirti invece che non è sufficiente leggere qua e là interventi su blog, forum o seguire qualche video da 10 minuti su youtube. La teoria è parte integrante, considerando che la disciplina in questione attinge da un sacco di altri grandi settori (ad esempio, matematica) e che l'informatica stessa... è enorme. ;)
Ho sentito qualche storia tipo questa... ho conosciuto qualche programmatore attorno - attualmente - ai 65/70 anni, e e ne ha raccontate di ogni. :D
Forse era un bel periodo in fondo (io non ero ancora nato)... ora come ora, sarà l'astrazione, la mentalità o atro, ma si sta perdendo un pò quel livello di competenze un pò più approfondito, e tanti programmatori finiscono per utilizzare cose senza avere la più pallida idea di come funzionino, o fregandosene completamente (anche di aspetti che meriterebbero di essere approfonditi, almeno per sapere la loro esistenza, prima di scrivere del codice).