Cenni ad Assembly ARM

Documenti analoghi
Cenni ad Assembly Intel

Istruzioni di trasferimento dati

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

ARM: stack e subroutine

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

Architettura degli Elaboratori

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

Calcolatori Elettronici A a.a. 2008/2009

Assembly. Modello x86

Macchina di Riferimento: argomenti

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

.: CALCOLATORI 7 MAGGIO 2015

Il linguaggio macchina

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

ARM: le istruzioni assembly

L insieme delle istruzioni (6)

Introduzione ad ARM e al processore S3C2440

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento

ARM esempi di programmi ASM

Linguaggio Assembly e linguaggio macchina

Istruzioni assembler Istruzione N Registri

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina

Corso di Calcolatori Elettronici I Istruzioni macchina ing. Alessandro Cilardo

Richiami sull architettura del processore MIPS a 32 bit

ISA e linguaggio macchina

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Assembly. Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A. Linguaggio assembly (App.

Esercitazione n. 3. Dott. Salvatore Pontarelli

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A.

ISA (Instruction Set Architecture) della CPU MIPS

Architettura del processore. Modello di calcolatore. Caratteristiche del processore. Caratteristiche del processore. Fondamenti di Informatica

Assembly (3): le procedure

Richiami sull architettura del processore MIPS a 32 bit

Università degli Studi di Cassino

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Architettura degli Elaboratori B Introduzione al corso

Piccola Introduzione al Linguaggio Assembly e Simili Amenità. Luca Abeni

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Università degli Studi di Roma La Sapienza

Convenzioni di chiamata a procedure

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

L'architettura del processore MIPS

Il linguaggio assembly

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

Il Processore: l unità di controllo

MIPS Instruction Set 1

Famiglia dei processori INTEL

Lezione4: MIPS e Istruzioni (1 Parte)

Modi di indirizzamento del processore MC68000 (parte prima)

Calcolatori Elettronici

Architettura dei Calcolatori elettronici

Il linguaggio assembly

Macchine Astratte. Luca Abeni. February 22, 2017

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Lecture 2: Prime Istruzioni

Lezione E3. Architettura ARM - I. Sistemi embedded e real-time

Il linguaggio macchina

Motivazioni. Assembly

Modi di indirizzamento

Calcolatori Elettronici

LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 15

Componenti di un processore

Il processore: unità di controllo

Motivazioni. Assembly

Motivazioni. Assembly. Programmazione Assembly. Programmazione Assembly

Metodi di indirizzamento

Architettura di una CPU

Istruzioni MIPS per floating point

Interruzioni o eccezioni? 1

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

Laboratorio di Architettura degli Elaboratori

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Calcolatori Elettronici

Lezione 12: L architettura LC-3

Strutture di controllo del flusso di esecuzione in assembler. MC68000: Status Register

Elementi base per la realizzazione dell unità di calcolo

Sistemi di numerazione

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

Sottoprogrammi in linguaggio assembly del Motorola 68000

Modi di indirizzamento del processore MC68000 (parte seconda)

System Calls, Register Spilling

21 March : ESERCITAZIONE 01 GESTIONE DELLA MEMORIA VETTORI CONTROLLOO O DI FLUSSO DI UN PROGRAMMA. I. Frosio

Gli indirizzi occupano spazio! Gli indirizzi occupano spazio! Corso di Architettura degli Elaboratori. Indirizzamento immediato

Programmazione Assembly per 8088: Esercizi svolti

Lezione 15 Il Set di Istruzioni (1)

Sommario. Premessa Architettura ARM Programmer's model (ARM7) Sistemi di sviluppo. S. Salvatori - Microelettronica aprile 2016 (13 di 45)

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Calcolatori Elettronici II parte (CdL Ingegneria Informatica) Esame del 22 settembre 2011 tempo a disposizione: 1 ora e 30 minuti

Laboratorio di Architetture degli Elaboratori II (A.A )

Architettura hardware

MIPS Instruction Set 1

Microcontrollori 12/03/2014. Progettazione Sistemi Elettronici 2013/2014 1

Aritmetica dei Calcolatori - Operazioni

Transcript:

Cenni ad Assembly ARM Luca Abeni March 3, 2017

Architettura ARM Utilizzata sulla maggior parte di tablet, smartphone ed in molti sistemi embedded Architettura nata negli anni 80 1987: Acorn Archimedes ARM = Acorn Risc Machine 1999: Advanced Risc Machine (nuova azienda!) Evoluzione meno complicata rispetto ad Intel ARM nasce a 32 bit Solo recentemente nuova architettura a 64 bit......ma non è troppo compatibile col passato! Architettura RISC (Reduced Instruction Set Computer) abbastanza pragmatica, che cerca di prendere il meglio dal mondo RISC e dal mondo Intel Forse questa è la chiave del suo successo? Calcolatori Luca Abeni 2 / 23

Assembly ARM Strano RISC con molte modalità di indirizzamento anche potenti ISA sviluppato per ovviare ai classici problemi delle architetture RISC Altro obiettivo: risparmio energetico Densità del codice... Solo 16 registri, general purpose In realtà ARM è una famiglia di CPU, con ISA leggermente differenti Non entreremo nei dettagli, ma considereremo solo gli aspetti a comune fra tutti gli ISA Al solito, assembler gnu Calcolatori Luca Abeni 3 / 23

Registri ARM 16 registri a 32 bit, quasi tutti general purpose Nomi: dar0 ar15 Tecnicamente,r15 non è un registro general purpose Alcuni registri accessibili tramite un nome simbolico che ne identifica l utilizzo r13 == sp (stack pointer) r14 == lr (link register) Application Program Status Register (apsr) / Current Program Status Register (cpsr) Flags register Calcolatori Luca Abeni 4 / 23

Utilizzo dei Registri Registri general purpose: r0... r14 Utilizzo non forzato da ISA, ma dipendente da ABI r13: spesso usato come stack pointer (sp), ma l utilizzo dipende da ABI Differenza da Intel: in ISA Intel, lo stack pointer deve essere %rsp r14: talvolta usato come link register (lr: indirizzo di ritorno da subroutine) Analogo a$ra /$31 di MIPS Registror15: contiene program counter (pc) e flags (bit 31...28) Distinzione chiara fra flag usati per esecuzione condizionale (apsr) ed altri flag Calcolatori Luca Abeni 5 / 23

Convenzioni di Chiamata Non fanno propriamente parte dell architettura Data una CPU / architettura, si possono usare molte diverse convenzioni di chiamata Servono per mettere d accordo diversi compilatori / librerie ed altre parti del Sistema Operativo Tecnicamente, sono specificate dall ABI, non dall ISA!!! Come / dove passare i parametri Stack o registri? Quali registri preservare? Quando un programma invoca una subroutine, quali registri può aspettarsi che contengano sempre lo stesso valore al ritorno? Nota: per ARM, esistono molti ABI diversi (anche molto diversi!) Calcolatori Luca Abeni 6 / 23

Primi 4 argomenti: r0... %r3 Convenzioni di Chiamata Registri non preservati! Utilizzabili anche come registri temporanei da non salvare! Altri argomenti (4 n): sullo stack Registri preservati: r4... r11 Eccezione: in alcuni ABIr9 non è preservato Valori di ritorno: r0 er1 I registri che una subroutine può utilizzare senza dover salvare sono quindir0,r1,r2,r3 edr12 Più eventualmenter9 (dipende da piattaforma / ABI) Calcolatori Luca Abeni 7 / 23

Modalità di Indirizzamento - 1 Istruzioni prevalentemente a 3 argomenti Simile a MIPS, ma meno regorale: ci sono istruzioni (mov, etc...) a 2 argomenti Operandi: sinistro e destro Operando sinistro: registro Operando destro: immediato o registro, eventualmente shiftato No operandi in memoria! Uniche operazioni che accedono alla memoria: load estore Load register / Store register (ldr /str) Load / Store multiple (ldm /stm) Calcolatori Luca Abeni 8 / 23

Modalità di Indirizzamento - 2 Operandi in memoria: varie modalità di indirizzamento Semplificando un po : Base + Offset (immediato) o Base + Indice (eventualmente scalato) In più, possibilità di aggiornare il registro base Aggiornamento prima dell accesso (pre indexed) o dopo l accesso (post indexed) i = <base> + {<indice (shiftato)> <offset>} <base>: valore in registro (come per MIPS) <offset>: costante (valore immediato) codificato su 12 bit con strana strategia... <indice>: valore in registro (semplifica iterazione su array) Opzionalmente shiftato o ruotato Pre Indexed: [rb, #i][!] o [rb,{+ }ro[,<shift>]][!] Post Indexed: [rb],#i o[rb],{+ -}ro[,<shift>] Calcolatori Luca Abeni 9 / 23

Indirizzamento - Casi Speciali Pre Indexed con registro indice: [rb,{+ }ro,<shift>][!] <shift> può indicare shift (aritmetici o logici) o rotazioni sul registroro Se no shift/rotazioni, può essere omesso [rb,{+ }ro][!] Pre Indexed con offset: [rb, #i][!] Offset = 0 può essere omesso [rb][!] Post indexed con indice: [rb],{+ -}ro,<shift> No shift si omette: [rb],{+ -}ro Post indexed con offset: [rb],#i Offset = 0 si omette: [rb] Come pre indexed con offset 0 e senza update!!! Calcolatori Luca Abeni 10 / 23

Indirizzamento - Tirando le Somme Più potente di MIPS Registro indice (scalato) Aggiornamento automatico del registro base Rispetto ad Intel Ha in più l aggiornamento automatico del registro base Ha in meno la possibilità di usare contemporaneamente offset (displacement) ed indice Aggiornamento automatico del registro base: utile per scorrere array Calcolatori Luca Abeni 11 / 23

Istruzioni ARM Architettura RISC con molte istruzioni Non proprio Reduced... Ampia documentazione su internet (esempio: http://www.peter-cockerell.net/aalp/html/ch-3.html Tutte le istruzioni permettono esecuzione condizionale Suffissoeq (equal),ne (not equal),hs (higher or same),lo (lower),mi (minus),... Condizioni basate sui 4 flag siapsr: n,z,cev Flag aggiornati da istruzioni aritmetico/logiche con suffisso (opzionale)s... O da apposite istruzioni di confronto (comecmp) Nomi registri non hanno prefisso (r0,r1,... r15), valori immediati (costanti) iniziano con # Calcolatori Luca Abeni 12 / 23

Istruzioni Aritmetiche e logiche <opcode>[<cond>][s] rd, rl, <r> Come MIPS, registro destinazione e 2 operandi No argomenti in memoria Perché <r>? Secondo argomento può essere immediato o registro differenza da MIPS:add invece cheadd edaddi Se registro, può essere shiftato o rotato Esempi: lsl/asl,lsr,asr,ror,rrx add r0, r1, #1 adds r0, r1, r2 addeq r0, r1, r2, lsl #2 addeqs r0, r1, r2, lsl r3 Calcolatori Luca Abeni 13 / 23

Istruzioni Più Comuni - 1 add /adc (add with carry) sub /sbc (sub with carry) rsb /rsc (reverse sub / reverse sub with carry) A che servono? Perché non usaresub /sbc con operandi invertiti? Perché il secondo e terzo argomento di un istruzione non sono equivalenti... Terzo argomento: possibilità di shift / rotazione!!! and /orr /eor /bic: operazioni booleane bit a bit bic (bitclear): calcolarl and not(<r>) mul,mla & friends: varie forme di moltiplicazione Nota: NO DIVISIONE! Istruzioni di shift e rotazione: tramite manipolazione del terzo argomento Calcolatori Luca Abeni 14 / 23

Istruzioni Più Comuni - 2 b: branch (anche salto condizionale, tramite suffisso...) bl: branch andlink (per invocazione di subroutine) Salva l indirizzo di ritorno nellinkregisterr14 bx: solo su alcune CPU, equivalente amov r15, r cmp: setta flags come sub, ma senza risultato! Da usarsi prima di salti condizionali Alre istruzioni simili: tst (esegue and),teq (xor),cmn (somma)... ldr /str: load / store register ldm /stm: load / store multiple registers mov mvn: move not. Muove il complemento ad 1 di un registro in un altro Calcolatori Luca Abeni 15 / 23

Load / Store Multiple ldm<mode> r, <register list> /stm<mode> r, <register list> <mode> può essere ia (increment after): registri salvati / recuperati nelle locazionir,r+4,r+8, etc... ib (increment before): registri salvati / recuperati nelle locazionir+4,r+8,r+12, etc... da (decrement after): registri salvati / recuperati nelle locazionir,r 4,r 8, etc... db (decrement before): registri salvati / recuperati nelle locazionir 4,r 8,r 12, etc... Usate prevalentemente in prologo / epilogo subroutine Nomi alternativi per suffissi: ea (empty ascending),ed (empty descending), fa (full ascending), fd (full descending) Calcolatori Luca Abeni 16 / 23

Esempio Stringa C: array di caratteri terminato da0 ASCII: caratteri codificati su byte Copia di una stringa: void c o p i a s t r i n g a ( char d, const char s ) { i n t i = 0; } while ( ( d [ i ] = s [ i ] )!= 0) { i += 1; } Esempio già visto per Assembly MIPS ed Intel... Come fare con Assembly ARM? Calcolatori Luca Abeni 17 / 23

Accesso a Singoli Byte Ricordate? Necessità di copiare byte, non parole... MIPS: load bytlb e store bytesb invece dilw esw Intel: soluzione semplice (ed elegante? Dipende dai punti di vista!) Registri composti da sottoregistri più piccoli al... dl: registri a 8 bit movb: da memoria a al.. dl o viceversa E ARM? Load register (ldr) e store register (str) possono avere suffissob,h, etc... Usiamoldrb edstrb! Calcolatori Luca Abeni 18 / 23

Implementazione Assembly: Prologo I due parametridedssono contenuti inr0 edr1 Invece di usare un registro per il contatorei, incrementiamo direttamenter0 edr1 Non sono registri preservati... Non è necessario salvarli sullo stack Si può usare indirizzamento post indexed!!! Non è necessario alcun prologo; possiamo cominciare col codice C Calcolatori Luca Abeni 19 / 23

Implementazione Assembly: Loop Ciclowhile: copias[i] ind[i] Prima di tutto, carichiamolo in un registro temporaneo Usiamor3 Per fare questo, usiamo indirizzamento post indexed (base + indice * scala, con scala = 1 e poi incrementa base) Nessuna necessità di caricare l indirizzo dell i-esimo elemento in un registro, come si faceva per MIPS ldrb r 3, [ r1 ], #1 Ora memoriazziamor3 ind[i] strb r 3, [ r0 ], #1 Calcolatori Luca Abeni 20 / 23

Implementazione Assembly: Fine del Loop Bisogna ora controllare ses[i] == 0 Se si, fine del loop! cmp r 3, #0 @ confronta r3 con 0... beq L2 @ se sono u g u a l i, s a l t a a @ ( esci dal loop! ) Se no, cicla... b c o p i a s t r i n g a La labell2 implementerà il ritorno al chiamante Calcolatori Luca Abeni 21 / 23

Implementazione Assembly: Fine Non abbiamo salvato nulla sullo stack: non c è necessità di epilogo! Si può direttamente tornare al chiamante L2 : mov r15, r14 Mettendo tutto assieme:. t e x t.globl c o p i a s t r i n g a c o p i a s t r i n g a : ldrb r 3, [ r1 ], #1 strb r 3, [ r0 ], #1 cmp r 3, #0 beq L2 b c o p i a s t r i n g a L2 : mov r15, r14 Calcolatori Luca Abeni 22 / 23

Vediamo GCC.... t e x t.global c o p i a s t r i n g a c o p i a s t r i n g a : ldrb r 3, [ r1 ] strb r 3, [ r0 ] cmp r 3, #0 bxeq l r L3 : ldrb r 3, [ r 1, #1 ]! strb r 3, [ r 0, #1 ]! cmp r 3, #0 bne L3 bx l r Calcolatori Luca Abeni 23 / 23