Che materia stai cercando?

Assembly x86 AMD64

Appunti di Architetture dei calcolatori su Assembly x86 AMD64 basati su appunti personali del publisher presi alle lezioni del prof. Ciciani, dell’università degli Studi La Sapienza - Uniroma1, facoltà di Ingegneria dell'informazione, Corso di laurea in ingegneria informatica e automatica. Scarica il file in formato PDF!. Scarica il file in formato PDF!

Esame di Architettura dei calcolatori docente Prof. B. Ciciani

Anteprima

ESTRATTO DOCUMENTO

If - else (salti)

Le istruzioni if - else vengono implementate in assemby tramite confronti e salti, prima si

effettua il test con CMP, dopodiché si usa Jcc per verificare condizione e nel caso saltare.

CMPx S, D calcola D - S

Jcc etichetta salto condizionato su etichetta, dipende da cc

JMP etichetta salto su etichetta, no condizioni

ATTENZIONE in questo modo si ha un sistema equivalente al goto, quindi nel caso di

normali condizioni di if bisogna ribaltare l'espressione

Condizioni

TEST CONDIZIONE CONDIZIONE C Assembly

(con segno) (senza segno) x ≤ y # x=%eax y=%ecx

If ( ) goto L

== e cmpl %ecx, %eax

!= ne jle L

< l b

≤ le be

> g a

≥ ge ae

Confronti tramite flags

Il calcolatore esegue i confronti tra le variabili tramite un operazione di sottrazione per poi

controllare lo stato dei flags e conoscere il risultato del confronto

OSS oltre alle normali condizioni di test si può usare direttamente lo stato dei flag per

effettuare operazioni salto, tramite:

Jnome_flag

JNnome_flag (la N permette di avere condizione inversa)

Cicli while-for

In entrambi i casi si imposta la condizione di ciclo con CMP e Jcc, se condizione fallisce

si eseguono operazioni fino a raggiungere JMP che salta nuovamente al test CMP

Nel caso di ciclo for la condizione si effettua su un contatore decrementato ad ogni loop 5

Le subroutine

Permettono di implementare le chiamate a funzione, la chiamata si effettua tramite

CALL RET.

l’istruzione il ritorno tramite la funzione Quindi ad ogni chiamata a funzione, la

CALL prima di saltare salva l'indirizzo

CALL nome_routine %rsp = %rsp - 8

(%rsp) = %rip di ritorno sulla cima dello stack, per

%rip = nome_routine poi recuperarlo alla fine tramite RET.

È quindi importante che alla fine del

RET %rip = %rsp programma tutte le alterazioni a

%rsp = %rsp + 8 %RSP vengano eliminate

Passaggio parametri funzioni

conventions”,

Definito dalle “calling si salvano sulla

cima dello stack i parametri (in eccesso ai registri) da

passare alla funzione prima di effettuare la chiamata.

1. Sottraggo a %RSP un numero di byte equivalente

a quelli necessari per salvare tutti i parametri

2. Tramite MOV e %RSP sposto i parametri sulla cima

dello stack (posso unire 1 e 2 usando push)

3. Eseguo istruzione CALL

4. Ripristino valore di %RSP

ATTENZIONE i parametri devono essere passati in

modo che il primo sia quello con l’indirizzo più basso

nella stack e gli altri crescano di conseguenza

C Assembly (mov) Assembly (push) NOTE

F( 10, 20) subq $16, %rsp pushq 20 bisogna comunque

movq $10, (%rsp) pushq 10 ripristinare valore

movq $10, 8(%rsp) call F originale di rsp in

call F addq $16, %rsp entrambi i casi

addq $16, %rsp

ATTENZIONE normalmente le variabili a 32 bit (o minori) dovrebbero essere promosse a

grandezza massima prima del CALL (in questo caso non necessario), %RSP non cambia

e le operazioni collegate ad esso devono essere effettuate comunque a 64 bit

Acquisizione parametri funzioni

L’acquisizione avviene in modo analogo andando a prelevare i parametri direttamente

dalla stack tramite l’offset di %RSP

C Assembly

Int F( long int x, long int y) f: movq 8(%rsp), %rax

addl 16(%rsp), %rax

ret

ATTENZIONE presenza indirizzo di ritorno e di eventuali altre modifiche al registro %RSP 6

Conversioni di tipo (cast)

1. Passaggio da tipo più grande a più piccolo

basta prendere solo la parte del registro necessaria

C Assembly

int a; movb %al, %bl

char b; #basta usare prefisso e nome registro più piccoli

b= (char) a

2. Passaggio da tipo più piccolo a più grande

in questo caso bisogna riempire lo spazio vuoto che può essere ancora falsato dal

valore precedente, per far questo si usano le istruzioni:

MOVZxx S, D D = ZeroExtend(S) Copia S in D riempiendo con tutti 0 i bit in più,

non considera il segno

MOVSxx S, D D = SignExtend(S) Copia S in D e copia il bit più significativo in tutti

i bit in più

xx sono i prefissi, prima quello di S poi quello di D

C Assembly

int a; Movbl %bl, %eax

char b;

a = (int) b

Coindizioni booleane

Una volta effettuato un test con CMP si può salvare un valore booleano su un registro con

SETcc D D = condizione Se la condizione è verificata scrive 1 in D

C Assembly

a = b < 0 cmpl $0, %rbx

setl %eax

ATTENZIONE in questo caso non si ha salto, quindi non si inverte condizione

Maschere di bit

Si usano per operare su un solo bit, si implementano combinando l’istruzione

corrispondente con un numero pari al bit o ai bit che si vogliono cambiare

1. Bit setting (bit impostato a 1) => istruzione OR

2. Bit clearing (bit impostato a 1) => istruzione AND

3. Inversione di un bit => istruzione XOR

4. Bit testing (estrae valore bit) => istruzione TEST 7


PAGINE

8

PESO

992.19 KB

AUTORE

duke0000

PUBBLICATO

6 mesi fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica e automatica
SSD:
A.A.: 2018-2019

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à La Sapienza - Uniroma1 o del prof Ciciani Bruno.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Architettura dei calcolatori

Architetture dei calcolatori
Appunto
Telecomunicazioni (Appunti+Esercizi esame+Formulario)
Appunto
Elettronica - Tutta la teoria per esercizi e domande
Appunto
Elettrotecnica - Come fare gli esercizi e tutte le domande teoriche
Appunto