Assembler alle prime armi.

di il
7 risposte

Assembler alle prime armi.

Salve, sono una persona non vedente e' mi piacerebbe tantissimo imparare il linguaggio assembler.
ho letto vari manuali in italiano, ed uno in particolare quake2 di antonio bonifati,
"che non riesco a rintracciare".
un esempio che fa:
07BE:0100 mov ah, 09
07BE:0102 mov dx, 010b
07BE:0105 int 21
07BE:0107 mov ah, 4c
07BE:0109 int 21
07BE:010B
ora mi chiedo:
perche' proprio l'indirizzo 010b viene assegnato al registro dx ?

7 Risposte

  • Re: Assembler alle prime armi.

    Perché la prima locazione dopo la fine del codice è proprio quella e sa quella locazione parte il buffer da usare con la funzione del bios usata (ah=9)

    Da quella locazione dovrebbe partire una stringa da visualizzare
  • Re: Assembler alle prime armi.

    Una delle grandi difficoltà del assembly consiste proprio nel fatto che un singolo comando fa "poco".
    In questo caso dobbiamo leggere i primi 3 comandi "insieme", presi singolarmente non hanno molto senso.
    Ma quando si arriva a "int 21h" si capisce (dopo aver studiato un po') che si tratta di una chiamata all'interrupt di servizio del DOS. A quel punto bisogna tornare indietro e guardare nei vari registri che valori vengono caricati:
    "mov ah, 09h" corrisponde alla funzione "Output character string" (stampa una stringa sulla console)
    che vuole come parametro l'indirizzo di una stringa in DS:DX
    pertanto se vai a guardare all'indirizzo 010bh dovresti trovare una stringa che termina con il carattere $ (e che non verrà stampato)

    È interessante notare che i due comandi successivi fanno terminare il programma ma contengono un errore madornale: non impostato nessun valore in AL (dovrebbe contenere il codice di ritorno del programma) lasciandovi il valore presente e sconosciuto!
  • Re: Assembler alle prime armi.

    xegdox ha scritto:


    Salve, sono una persona non vedente e' mi piacerebbe tantissimo imparare il linguaggio assembler.
    ho letto vari manuali in italiano, ed uno in particolare quake2 di antonio bonifati,
    "che non riesco a rintracciare".
    un esempio che fa:
    07BE:0100 mov ah, 09
    07BE:0102 mov dx, 010b
    07BE:0105 int 21
    07BE:0107 mov ah, 4c
    07BE:0109 int 21
    07BE:010B
    ora mi chiedo:
    perche' proprio l'indirizzo 010b viene assegnato al registro dx ?
    un'altra cosa chiedevo, un manuale in italiano della cpu:
    product: Intel(R) Core(TM) i5-
  • Re: Assembler alle prime armi.

    Proprio perche' sei non vedente:

    1) ma chi te lo fa fare a scornarti con l'assembler, quando ci sono linguaggio di programmazione MOOOOOOLTO piu' interessanti da studiare: Julia, Python, Haskell, Erlang, Prolog, ... giusto per citarne alcuni: puoi fare di piu, cose piu' interessanti, in meno tempo, oppure imparare a programmare con "paradigmi di programmazione" piu' intelligenti

    2) se vuoi navigare in questo mare, non puoi svicolare il fatto che il 99.9999% (ma posso aggiungere altri 9 in coda) della documentazione e' in inglese.

    L'assembler (che i "puristi" chiamano assembly) e' complicato, molto povero, e per farci qualcosa di minimamente decente devi fare sforzi immani.

    Dove si usa: fondamentalmente in applicazioni a bassissimo livello, ad esempio driver di dispositivi hardware, oppure nell'implmentazione ULTRA EFFICIENTE di piccoli algoritmi.

    Una volta (anni '60) si scriveva tutto in assembler ed i programmatori usavano il camice bianco.

    Oggi lo usi per l'hacking, perche' un buon compilatore C e' in grado di fare bene o anche meglio di quanto puo' fare un programmatore "medio" scrivendo il codice direttamente in assembler.
  • Re: Assembler alle prime armi.

    PERCHE' IMPARARE L'ASSEMBLER?
    Perchè imparare l'Assembler quando esistono centinaia di linguaggi,
    supporti, potenti piattaforme in grado di gestire con estrema
    semplicità qualunque cosa?
    Qui c'è la grande fobia. Ci stiamo sempre di più allontanando dalle
    macchine e in pratica già oggi ne siamo dominati.
    Che succederà tra qualche decennio quando programmi sempre più
    complessi consentiranno di costruire applicazioni con il solo
    riconoscimento vocale, e le reti neuroniche si perfezioneranno??
    CHI controllerà che a livello di macchina venga implementato
    ESATTAMENTE ciò che noi vogliamo???
    E' ovvio che chi avrà la possibilità di controllare tutto ciò si
    ritroverà in mano un potere virtualmente illimitato.
  • Re: Assembler alle prime armi.

    Le considerazioni che hai fatto sono totalmente sbagliate.

    Il confronto corretto e' quello della matematica: che senso ha ritornare a studiare il teorema di pitagora, quando ci sono oggetti matematici (gli spazi di Riemann) che COMPRENDONO lo spazio euclideo, ma sono piu' interesanti perche' ci si possono fare piu' cose?

    La macchina mostro e' un'invenzione delle persone senza una 'cultura informatica'.

    Chi si occupa SERIAMENTE di queste cose, sa benissimo che non c'e' niente di 'miracoloso': le reti neurali, ad esempio, non sono altro che una intelligente applicazione di banali concetti di algebra lineare (somme/sottrazioni/moltiplicazioni/divisioni) e ' 'ottimizzazione' (cercami il minimo, il massimo). Uno, una rete neurale, la potrebbe usare anche con la sola carta e matita!

    Il problema e' proprio questo: il miglioramento della vita fa si che la gente studi sempre di meno, diventando sempre piu' 'ignoranti', con le conseguenti 'paturnie' e facilita' di 'manipolaziono', a favore di quei pochi che, invece, investiranno in cultura.
  • Re: Assembler alle prime armi.

    xegdox ha scritto:


    PERCHE' IMPARARE L'ASSEMBLER?
    Perchè imparare l'Assembler quando esistono centinaia di linguaggi,
    supporti, potenti piattaforme in grado di gestire con estrema
    semplicità qualunque cosa?
    Qui c'è la grande fobia. Ci stiamo sempre di più allontanando dalle
    macchine e in pratica già oggi ne siamo dominati.
    Che succederà tra qualche decennio quando programmi sempre più
    complessi consentiranno di costruire applicazioni con il solo
    riconoscimento vocale, e le reti neuroniche si perfezioneranno??
    CHI controllerà che a livello di macchina venga implementato
    ESATTAMENTE ciò che noi vogliamo???
    E' ovvio che chi avrà la possibilità di controllare tutto ciò si
    ritroverà in mano un potere virtualmente illimitato.
    Se i tuoi dubbi sono questi, allora il linguaggio che devi scegliere è il C. Quando hai bisogno di scendere a basso livello, puoi usare le macro asm. Ma scrivere un progetto complesso tutto in assembly è praticamente impossibile
Devi accedere o registrarti per scrivere nel forum
7 risposte