Linguaggio Assembly?
Salve a tutti,sono uno studente dell'industriale informatico e stiamo per trattare Assembly;il prof più di una volta ci ha detto che è molto difficile,ecco vorrei sapere in cosa consiste questo linguaggio,a cosa serve per un informatico conoscerlo e se è veramente così difficile...Grazie a tutti 10 punti al migliore
2 risposte
- nicoladc89Lv 71 anno faRisposta preferita
In realtà probabilmente è sbagliato dire che è molto difficile, è un linguaggio e lo impari come impari gli altri linguaggi, fai le stesse cose che fai col C. Ci sono anche molte meno istruzioni da imparare.
Però è molto meno intuitivo di un linguaggio ad alto livello (quelli in cui praticamente scrivi in inglese e linguaggio matematico), è più facile fare degli errori e soprattutto è molto più lento, istruzioni che in C scrivi in una riga in Assembly diventano cinque, dieci, cinquanta righe. E cambia per ogni processore.
Ti faccio un esempio banale, per fare una somma
in C
n = 5+5;
in Assembly 8086
MOV AH, 5
MOV AL, 5
ADD AH, AL
Cosa fai qui? Sposti 5 in AH che è un registro, o meglio è la metà di un registro AX chiamato accumulatore. Poi 5 in AL che è l'altra metà. Infine sommi.
Ovviamente più un istruzione diventa complicata e più l'assembly diventa complicato.
La potenza di un numero in C la fai con una istruzione, in Assembly diventa un programmino di sette otto righe.Inoltre ti devi occupare di un sacco di cose, beh, in realtà non tante di più di quelle di cui ti devi occupare in C. Ma molte di più di quante ti debba preoccupare in Java per esempio. Questo è il classico Hello World in Assembly 8086
name "hi"
org 100h
jmp start
msg: db "Hello, World!", 0Dh,0Ah, 24h
start: mov dx, msg
mov ah, 09h
int 21h
mov ah, 0
int 16h
ret
Comunque, se vuoi provare il compilatore GCC può restituire il codice assembly di un programma scritto in C, così vedi le differenze.
A cosa serve conoscerlo? In realtà a poco, è abbastanza difficile che un giorno o l'altro ti ritrovi a programmare in Assembly, difficile ma non impossibile, l'assembly si usa ancora in certi campi. Però sono arrivati linguaggi molto più immediati, più veloci che danno meno problemi.
Però A. conoscere le cose è sempre meglio di non conoscerle e B. è utile per capire come lavora un computer, cosa di cui ci si dimentica spesso quando si programma ad alto livello. Che tu scriva programmi in C, in Java, in Python, in Caml o C# alla fine della fiera, il computer lavora sempre nello stesso modo e l'Assembly te lo fa capire.
- 1 anno fa
Non so quali linguaggi tu abbia studiato, ma se conosci per esempio c, assembly è il linguaggio nel quale viene tradotto il tuo codice quando compili un programma. Assembly è comunque un termine abbastanza vago, dato che ne esistono molti tipi (intel, arm, ...). Di base però, in un programma assembly, scrivi i comandi che scriveresti in un linguaggio di livello più alto utilizzando direttamente i registri (memorie molto veloci presenti nel processore). Per esempio se tu volessi scrivere (in c per esempio):
int a=1;
int b=2;
int c=a+b;
In assembly(arm) scriveresti:
mov r0, 1
mov r1, 2
add r2, r0, r1
Ciò significa che metterai nei registri 0 e 1 i valori 1 e 2 e che metterai nel registro 2 la somma dei registri precedenti. Ovviamente questo è un esempio molto semplice, il codice diventa più complesso nel caso per esempio di un ciclo for/while, di una funzione, ...
Per un informatico è sicuramente utile conoscerlo perché ti fa capire effettivamente ogni volta che scrivi un comando, come sarà poi tradotto e trattato dal computer. Utilizzando assembly hai accesso diretto alla memoria e sta a te gestirla, quindi impari a ragionare a un livello molto più basico. Bisogna comunque dire che in pochi programmano in assembly, un esempio di applicazione sono la gestione delle interruzioni in c.