User Tools

Site Tools


educare:assembler

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

  1. produce diversi formati: a.out, coff, elf32, elf64, win32 (16,32,64 bit), rdf
  2. Netwide Assembler, possiede un disassemblatore: ndisasm
  3. come MASM e TASM usa la sintassi Intel, priva di direttive, rimuovendo le ambiguità
  4. se si vuole specificare un indirizzo della memoria lo si deve racchiudere tra parentesi quadrate altrimenti è considerata una costante.
  1. una label è una pura costante numerica
label:          instruction operands                ;comment

yasm

È un software compilatore assembler

  1. permette di compilare usando diversi tipi di sintassi (non supporta la sintassi intel)
  2. permette di compilare per diverse architetture hardware (x86, IA-32, AMD64)
  3. 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

  1. GNU Assebler (spesso fornito insieme a gcc).
  2. gasp è il programma preprocessore macro
  3. Usa la sintassi AT&T come anche il compilatore as
  4. 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

  1. il nome dei registri inizia con percentuale: %eax
  2. il nome delle costanti inizia con il dollaro: $5
  3. il dollaro usato davanti ad una variabile indica il suo indirizzo: $var
  4. le parentesi intorno al nome di una variabile indica il suo contenuto: (var)
  5. una variabile senza dollaro indica il suo contenuto
  6. il comando mov ha un suffisso che indica il numero di bit da utilizzare per la costante:
    1. il comando mov si può usare con operandi di un byte (movb), due byte (movw), quattro byte (mowl)
  7. Le operazioni con due operandi specificano prima la sorgente e dopo la destinazione: movl $5,%eax

direttive gas

  1. .intel_syntax
  2. .code16
  3. .code32
  4. asm(“.code16\n”)
  5. gcc compila a 32 bit, ma gas può cambiare modalità di indirizzamento

Macro

  1. GNU m4 (Beware that m4 may be dangerous for the health of compulsive programmers)
educare/assembler.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1