User Tools

Site Tools


educare:assembler

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
educare:assembler [2014/06/16 02:02] – [gas] profproeducare:assembler [2020/06/08 22:20] (current) – external edit 127.0.0.1
Line 1: Line 1:
  
 +=====Sintassi intel, nasm, gas/at&t=====
 +
 +Esistono storicamente diverse sintassi per i processori Intel
 +
 +====intel====
 +
 +...da fare
 +
 +====nasm====
 +
 +https://github.com/yasm/yasm/wiki/Nasmsyntax
 +http://www.tortall.net/projects/yasm/manual/html/nasm.html
 +
 +  - produce diversi formati: a.out, coff, elf32, elf64, win32 (16,32,64 bit), rdf
 +  - Netwide Assembler, possiede un disassemblatore: //ndisasm//
 +  - 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:          instruction operands                ;comment
 +
 +===== 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 //binutils//
 +
 +https://github.com/yasm/yasm/wiki/Gassyntax
 +
 +  - GNU Assebler (spesso fornito insieme a //gcc//). 
 +  - //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://en.wikipedia.org/wiki/MOV_%28x86_instruction%29
 +
 +  - il nome dei registri inizia con percentuale: %eax
 +  - 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: //movl $5,%eax//
 +
 +=== direttive gas ===
 +
 +  - .intel_syntax
 +  - .code16
 +  - .code32
 +  - asm(".code16\n")
 +  - //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)