Estratto del documento

Chiamata di funzioni e registri

Quando una funzione viene chiamata, parametri passati nel seguente ordine: RDI, RSI, RDX, RCX, R8, R9. I successivi nello stack.

Valori di ritorno memorizzati nei registri RAX, RDX.

Esempio

MOV 42, %RAX
RET

Quando una funzione viene chiamata, parametri passati nel seguente ordine: RDI, RSI, RDX, RCX, R8, R9. I successivi nello stack.

Valori di ritorno memorizzati nei registri RAX, RDX.

Esempio

MOV 42, %RAX
RET

Registri caller-save

Registri caller-save: RAX, RCX, RDX, RSI, RDI, R8 - R11.

Deve essere salvato dal chiamante se vuole preservarne il valore.

Se una funzione usa questi registri può sovrascriverli senza preoccupazioni.

PUSH %RCX
CALL SOMMA
POP %RCX

Registri callee-save

Registri callee-save: RBP, RBX, R12 - R15.

Preservato dalla funzione chiamata se viene modificato.

Se una funzione vuole usarli, deve salvare contenuto stack e ripristinarlo prima di restituire controllo.

SOMMA:
PUSH %RBX
POP %RBX

Maschere di bit

  • Forzare bit a 1: ORL $0x80000000, %EAX
  • Forzare bit a 0: ANDL $0x7FFFFFFF, %EAX
  • Invertire ultimo bit: XORL $0x80000000, %EAX
  • Azzera un registro: MOVQ $0, %RAX
  • XORQ %RAX, %RAX
  • Estrazione 3 bit meno significativi: 000...00111
  • ANDL $7, %EAX
  • Verificare che sono a zero: TESTL $7, %EAX

Manipolazione di array in Assembly

movq $0, %RCX
movq $ARRAY, %RAX
.loop
movq (%RAX, %RCX, 8), %RDX
addq $1, %RCX
cmpq $SIZE, %RCX
JNZ .loop

Oppure

movq $0, %RCX
Loop:
movq (, %RCX, 8), %RDX
addq $1, %RCX
cmpq $SIZE, %RCX
JNZ .Loop

Istruzioni per operare su stringhe

Istruzioni per operare su stringhe (buffer di dati).

Utilizzo registri:

  • RCX: contatore numero di operazioni elementari da eseguire
  • RSI: indirizzo sorgente
  • RDI: indirizzo destinazione
  • RAX: valore cui impostare la memoria

DF=0: operazione di copia in avanti.

DF=1: operazione di copia in indietro.

MOVS

movq $source, %rsi
movq $dest, %rdi
movq $size/8, %rcx
cld
movsq

Sposta dati da stringa a stringa.

STOS

movq $0x0, %rax
movq $dest, %rdi
movq $size/8, %rcx
cld
stosq

Store string.

Interazione busy waiting

outb %al, $device.bw
inb $device, %al
btb $0, %al
jnc .bw

Driver di periferica

Cancellazione della richiesta obbligatoria.

outb %al, $device_irq

DMAC può essere programmato con istruzioni dedicate.

INSX

Leggi 10 byte da device.

MOVQ $10, %RCX
MOVQ $DEST, %RDI
MOVQ $DEV_MEM, %DX
CLD
INSB

OUTSX

Scrivi 10 byte su device.

MOVQ $10, %RCX
MOVQ $DEST, %RSI
MOVQ $DEV_MEM, %DX
CLD
OUTSB

Disegni

  • Busy Waiting (un solo flip flop status)
  • Interruttore (una entrata opposta dell'altra)
  • Daisy Chain (un solo IRQ)

Non si può effettuare altre interruzioni finché non finisce processo.

Ci possono essere altre situazioni (status & altri flip flop).

Anteprima
Vedrai una selezione di 3 pagine su 9
Calling Conventions Pag. 1 Calling Conventions Pag. 2
Anteprima di 3 pagg. su 9.
Scarica il documento per vederlo tutto.
Calling Conventions Pag. 6
1 su 9
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 davidescri di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici 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 Tor Vergata o del prof Pellegrini Alessandro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community