educare:assembler
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
educare:assembler [2014/06/16 02:02] – [gas] profpro | educare:assembler [2020/06/08 22:20] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | =====Sintassi intel, nasm, gas/ | ||
+ | |||
+ | Esistono storicamente diverse sintassi per i processori Intel | ||
+ | |||
+ | ====intel==== | ||
+ | |||
+ | ...da fare | ||
+ | |||
+ | ====nasm==== | ||
+ | |||
+ | https:// | ||
+ | http:// | ||
+ | |||
+ | - produce diversi formati: a.out, coff, elf32, elf64, win32 (16,32,64 bit), rdf | ||
+ | - Netwide Assembler, possiede un disassemblatore: | ||
+ | - come MASM e TASM usa la sintassi Intel, priva di direttive, rimuovendo le ambiguità | ||
+ | - se si vuole specificare un indirizzo della memoria lo si deve racchiudere tra //parentesi quadrate// altrimenti è considerata una costante. | ||
+ | |||
+ | - una label è una pura costante numerica | ||
+ | |||
+ | label: | ||
+ | |||
+ | ===== yasm ===== | ||
+ | È un software compilatore assembler | ||
+ | - permette di compilare usando **diversi** tipi di sintassi (non supporta la sintassi intel) | ||
+ | - permette di compilare per **diverse** architetture hardware (x86, IA-32, AMD64) | ||
+ | - permette di compilare in **diversi** formati binari: coff, elf32, elf64, macho32, win32 (16,32,64 bit) | ||
+ | |||
+ | |||
+ | ====gas==== | ||
+ | |||
+ | Per Linux si trova nel pacchetto // | ||
+ | |||
+ | https:// | ||
+ | |||
+ | - GNU Assebler (spesso fornito insieme a // | ||
+ | - //gasp// è il programma preprocessore macro | ||
+ | - Usa la sintassi AT&T come anche il compilatore //as// | ||
+ | - questa sintassi può essere usata anche nei pogrammi in linguaggio C con gcc | ||
+ | |||
+ | === Sintassi GNU AS, detta anche AT&T === | ||
+ | |||
+ | http:// | ||
+ | |||
+ | - il nome dei registri inizia con percentuale: | ||
+ | - il nome delle costanti inizia con il dollaro: $5 | ||
+ | - il dollaro usato davanti ad una variabile indica il suo indirizzo: $var | ||
+ | - le parentesi intorno al nome di una variabile indica il suo contenuto: (var) | ||
+ | - una variabile senza dollaro indica il suo contenuto | ||
+ | - il comando mov ha un suffisso che indica il numero di bit da utilizzare per la costante: | ||
+ | - il comando //mov// si può usare con operandi di un byte (movb), due byte (movw), quattro byte (mowl) | ||
+ | - Le operazioni con due operandi specificano prima la sorgente e dopo la destinazione: | ||
+ | |||
+ | === direttive gas === | ||
+ | |||
+ | - .intel_syntax | ||
+ | - .code16 | ||
+ | - .code32 | ||
+ | - asm(" | ||
+ | - //gcc// compila a 32 bit, ma //gas// può cambiare modalità di indirizzamento | ||
+ | |||
+ | |||
+ | ==== Macro ==== | ||
+ | |||
+ | - GNU m4 (Beware that m4 may be dangerous for the health of compulsive programmers) |