Newsgroup: it.comp.programmare
Titolo: assembler/assembly

Ciao, sono un newbie della programmazione e lurkando qua, sento spesso 
parlare di assembler e/o assembly.
Ho capito che si tratta dei linguaggi a livello più basso dopo il codice 
binario, ma ciò che non mi è chiaro è la differenza tra i due: 
assembly è un sottoinsieme degli assembler o sono due linguaggi diversi?
grazie a tutti e un saluto :)
 

>assembly è un sottoinsieme degli assembler o sono due linguaggi diversi?
Assembly e' il linguaggio ("mov ax,bx", "inc cx", "add ax,10h");
assembler e' il programma che legge il sorgente in formato testo e lo
compila in un eseguibile o in un file intermedio per esempio .obj.



Per assembly si intende generalmente il linguaggio, mentre l'assembler
(come suggerisce la -er finale... come in challenger, bender etc...) è
"colui che assembla" ovvero l'assemblatore.
Diciamo che l'assembler è a grandi linee un semplice compilatore da
assembly a linguaggio macchina.
Anche se spesso e volentieri si fa confusione fra assembly e
assembler..chiamando assembler anche il linguaggio... il che eprò non
è del tutto corretto.
Ah, un altra cosa, non è corretto neppure parlare di UN linguaggio
assembly.
In realtà macchine diverse hanno linguaggi assembly diversi.
Differenze marginali in taluni casi (macchine più o meno della stessa
famiglia) e abissali in altri.
Ad esempio l'assembly generalmente usato da macchine con processore
Intel deriva da una comune famiglia (che potremmo chiamare Assembly
x86 :-) ) un altra scuola di pensiero porta invece all'assembly dei
processori MIPS.
Ancora più in generale potremo dire che esistono due grandi famiglie
di ISA (Instruction Set Architecture) ovvero due diversi modi di
concepire l'organizzazione degli operandi e degli operatori che fanno
da "collante" tra software e hardware, la classe CISC e la classe
RISC.
In breve la difefrenza fondamentale è che con l'approccio CISC si
tende ad avere molte istruzioni di basso livello che permettono di
svolgere funzioni anche molto complesse e con molte possibili
varianti, nel caso RISC invece il set di operatori e operandi è
ridotto all'osso il tutto per semplificare l'hw che ci sta sotto e
renderlo più veloce... aggiungerei che in genere gli assembly che
trovi in macchine che sposano la filosofia RISC tendono ad essere
molto più semplici da imparare e soprattutto coerenti.
La differenza tra assembly e linguaggio macchina è abbastanza
sottile... diciamo che nell'assembly ha vari acronimi per riferirti
sia agli operatori che agli operandi, nel linguaggio macchina gli
acronimi vengono sostituiti con valori numerici.
In realtà le cose sono molto più complesse... ma non mi sembra il caso
di dilungarsi.
Per stringere...vediamo un semplice esempio tratto da un semplice set
di istruzioni tipicamente MIPS:
add $t0,$s1,$s2
ecco l'istruzione somma i valori (a 32 bit) contenuti nei registri s0
e s1 e lo butta nel registro t0.
in linguaggio macchian questo potrebbe diventare una sequenza tipo:
000000 10001 10010 01000 00000 100000
dove i primi 6 bit sono riservati al codice dell'operazione, poi 5 per
il primo operando, 5 per il secondo , 5 per il registro in cui mettere
i risultati, 5 di scalamento e 6 di modificatore funzione.
Esistono 5 bit per definire gli operandi perchè nel MIPS si hanno 32
registri per operazioni con interi.
Non mi addentro nei dettagli, comunque se ti interessa l'argomento (e
un po' tutto quello che ci sta intorno) ti consiglio di leggerti il
libro:
""Struttura, organizzazione e progetto dei calcolatori", Patterson e
Hennessy, Ed. Jackson
E' in italiano... tradotto da cani... se preferisci l'originale in
inglese è:
"Computer Organization & Design", Morgan Kaufmann Publishers
In particolare se vuoi divertirti con l'assembly ti consiglio di
lasciar perdere gli assembly dei processori Intel... direi piuttosto
di cominciare con l'assembly dei MIPS, cerca su Google SPIM, un
emulatore di macchina MIPS.
Augusto Pucci
http://www.neuraldaemon.com/pucci

 assembly.
[...]
dipende. Spesso lo stesso assembly viene usato per più architetture 
diverse. Ad esempio, gas (GNU Assembler) usa lo stesso per tutte le 
architetture che supporta, anche e soprattutto Intel (è l'unico che 
conosca a non usare la sintassi Intel per l'assembly x86)
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.20. C, C++ and ASM developers
                              and beta testers are welcome!

diverse.
Ma questo non significa che esista UN assembly.
Augusto Pucci
http://www.neuraldaemon.com/pucci

CreateGirlEx() wrote:
wow che bel nick!
A giudicare dalle convezioni sulle maiuscole direi che e` una syscall di 
win: quale versione? Che parametri prende?
Potrebbe sempre fare comodo... :-)))
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 syscall di win: quale versione? Che parametri prende?
non si sa. E' stata usata una volta sola e poi sono stati persi i 
sorgenti :-)


sorgenti :-)
Mmm un bel reversing potremmo farlo perň :P
(niente doppi sensi prego)
Rhymes