Estratto del documento

Assembly x86

Linguaggio testuale equivalente a linguaggio macchina, ogni programma deve essere tradotto in assembly per essere interpretato dalla macchina.

ISA

Le istruzioni eseguibili da una CPU sono definite dal instruction set architecture (ISA), differente per ogni tipo di architettura. In questo caso si fa riferimento all'architettura x86 versione AMD64 (AT&T).

OSS

Per disassemblare un programma ed ottenere il codice assembly equivalente si può usare il comando da terminale: objdump -d -S nome_file (oppure).

Scheletro programma assembly

Solitamente si iniziano i programmi con .globl istruzione che serve per mandare il processore in idle alla fine del programma HLT.

Direttive assembly

  • .org address, fill => Imposta location counter (indirizzo assoluto), imposta byte a fill.
  • .equ symbol, expression => Definisce una costante (equivalente a symbol = expression).
  • .byte expression => Riserva memoria di (expression*byte).
  • .word expression => Riserva memoria di (expression*word).
  • .long expression => Riserva memoria di (expression*long).
  • .quad expression => Riserva memoria di (expression*quad).
  • .asciz "string" => Riserva memoria per vettore di caratteri impostato a "string".
  • .fill repeat, size, value => Riserva memoria di (repeat celle * dimensione size) e le imposta a value. Default size = 1, value = 0.
  • .comm symbol, length => Dichiara area di memoria con nome symbol e dimensione length nella sezione bss del programma.
  • .handleridn / idn => Identifica inizio routine di servizio associata a idn.
  • .data => Delimita la sezione contenente la sezione data del programma.
  • .text => Delimita la sezione contenente la sezione testo del programma.

OSS

Le assegnazioni in assembly si effettuano tramite “:”.

Tipi di dato C e suffisso

L’accesso a memoria avviene in due passi:

  1. Si salva l’indirizzo della locazione di memoria in un registro.
  2. Si accede al contenuto dell’indirizzo tramite l’operando (%registro) o tramite l’operando (%base, %indice, %scala).

Nota: Sono quindi equivalenti ai puntatori alle locazioni di memoria in C.

Tipo Suffisso Byte
CHAR B 1
SHORT W 2
INT L 4
DOUBLE Q 8

Operandi

  • TIPO
  • SUFFISSO
  • Registro %
  • Immediato $
  • Memoria (%registro)
  • Scala può valere
  • Memoria (aritmetica dei puntatori)
  • Immediato (%base, %indice, %scala) solo: 1, 2, 4, 8
  • Esadecimale (indirizzo) 0x
  • Immediato (Base, indice, scala) => (base + (indice * scala)) + immediato

Con MOV => base[indice + imm] (imm deve essere multiplo di scala che deve corrispondere con il tipo della base)

I registri general purpose (64bit)

64 bit 32 bit 16bit 8bit Nome
%RSP %ESP %SP Stack pointer
%RBP %EBP %BP Base pointer
%RAX %EAX %AX %AL Accumulatore Base
%RBX %EBX %BX %BL Contatore
%RCX %ECX %CX %CL Dati
Anteprima
Vedrai una selezione di 3 pagine su 8
Assembly x86 AMD64 Pag. 1 Assembly x86 AMD64 Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Assembly x86 AMD64 Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher duke0000 di informazioni apprese con la frequenza delle lezioni di Architettura dei calcolatori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Ciciani Bruno.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community