Sottoprogrammi in linguaggio assembly del Motorola 68000
|
|
|
- Geronima Pizzi
- 9 anni fa
- Visualizzazioni
Transcript
1 Sottoprogrammi in linguaggio assembly del Motorola Daniele Paolo Scarpazza Politecnico di Milano Ultimo aggiornamento: 10 Maggio 2005
2 Bibliografia Sezioni 4.9, 5.6 del libro di testo: Hamacher, Vranesic & Zaky Introduzione all'architettura dei calcolatori McGraw-Hill Science Esempi importanti di traduzione da C ad assembly: Basics/CToAssemblyTranslation.htm Esempi sull'uso del record di attivazione: 25_stack_frames.html
3 Strumenti Strumento da usare: EASy68K Editor/Assembler/Simulator for the Disponibile presso:
4 Modello di chiamata di sottoprogramma Interessa le seguenti scelte: Dove vanno posti i parametri in ingresso? (nei registri? nella pila? in entrambi?) In quale ordine si caricano i parametri sulla pila? (solitamente le push appaiono in ordine inverso) Chi deve salvare i registri? (il chiamante? il chiamato? quali? partizionamento caller-save e callee-save registers?) Come si passa il valore di ritorno? (in un registro? sulla pila? come? solitamente sovrascrivendo i parametri) Chi abbatte la pila al ritorno? (il chiamante? il chiamato?) Si usa una catena di record di attivazione (stack frames) oppure no? Le scelte confluiscono nella cosiddetta Application Binary Interface (ABI) di un certo sistema operativo; in assenza di sistema operativo, le scelte sono libere;
5 Chiamata di sottoprogramma Istruzione di salto a sottoprogramma: BSR (branch to subroutine) salto vicino JSR (jump to subroutine) salto lontano salto incondizionato che impila il program counter e salta all'indirizzo specificato; Istruzione di ritorno da sottoprogramma: RTS (return from subroutine) disimpila il program counter e salta all'indirizzo appena disimpilato;
6 Passaggio dei parametri nei registri Esempio di programma (~Fig. 5.11, remake di 5.8) che calcola la somma di un array di interi a 32 bit. Parametri di ingresso: in A2 l'indirizzo e in D1 la lunghezza dell'array; Valore di ritorno: lascia la somma calcolata in D0; ORG $2000 SUM EQU $2000 * we store the sum here ARRAY DC.L 1,2,3,4,5,6,7,8,9,10 * an array of 10 integers LENGTH EQU 10 * the array length ORG $1000 DO_SUM ************************************************************** SUBQ.L #1,D1 * initialize the loop index to N-1 CLR.L D0 * use D0 as accumulator; clear it LOOP ADD.L (A2)+, D0 * sum current cell to D0 DBRA D1, LOOP * decrement index D1 and loop RTS * return from subroutine START ************************************************************* MOVEA.L #ARRAY, A2 * set array location parameter to A2 MOVE.L #LENGTH, D1 * set array length parameter to D1 BSR DO_SUM * call the subroutine MOVE.L D0, SUM * save the final sum to variable STOP #$2000 END START
7 Passaggio dei parametri sulla pila Modifica del programma (~Fig. 5.12) con passaggio di parametri e del valore di ritorno sulla pila; La gestione dello stack è esplicita e non fa uso di ; Attenzione al modello di chiamata scelto: push dei parametri nello stesso ordine in cui sono pensati, cioè prima la lunghezza dell'array (primo parametro) e poi indirizzo dell'array (secondo parametro); di solito succede il contrario; valore di ritorno che sovrascrive il primo parametro; salvataggio dei registri da parte del chiamato; il chiamato salva i soli registri che lui sa di usare; il chiamante rimuove i parametri dalla pila dopo la chiamata;
8 Passaggio dei parametri sulla pila Modifica del programma (~Fig. 5.12) con passaggio di parametri e del valore di ritorno sulla pila; La gestione dello stack è esplicita e priva di ; ORG $2000 SUM EQU $2000 * the variable where we store the sum ARRAY DC.L 1,2,3,4,5,6,7,8,9,10 * an array of 10 integers LENGTH EQU 10 * the array length ORG $1000 DO_SUM MOVEM.L D0-D1/A2,-(A7) * save D0, D1 and A2 on the stack MOVE.L 16(A7), D1 * retrieve array length from the stack SUBQ.L #1,D1 * initialize the loop index to N-1 MOVEA.L 20(A7), A2 * retrieve array location from the stack CLR.L D0 * use D0 as accumulator; clear it LOOP ADD.L (A2)+, D0 * sum current cell to D0 DBRA D1, LOOP * decrement index D1 and loop MOVE.L D0, 20(A7) * save the result onto the stack MOVEM.L (A7)+,D0-D1/A2 * restores the registers from the stack RTS * return from subroutine START MOVE.L #ARRAY, -(A7) * push array location parameter MOVE.L #LENGTH, -(A7) * push array length parameter BSR DO_SUM * call the subroutine MOVE.L 4(A7), SUM * retrieve the result from the stack ADD.L #8, A7 * reposition the stack pointer STOP #$2000 END START
9 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF0 FFFFF4 FFFFF8 FFFFFC Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
10 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP FFFFF0 FFFFF4 FFFFF8 FFFFFC (#ARRAY) DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
11 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF0 FFFFF A FFFFF8 (#LENGTH) FFFFFC (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
12 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF E FFFFF4 (PC rit) A FFFFF8 (#LENGTH) FFFFFC (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
13 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF E FFFFF4 (PC rit) A FFFFF8 (#LENGTH) FFFFFC (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
14 Parametri sulla pila: simulazione Stato della pila: FFFFE FFFFE8 (D0) FFFFEC (D1) FFFFF0 (A2) E FFFFF4 (PC rit) A FFFFF8 (#LENGTH) FFFFFC (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
15 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE A7 (D0) FFFFEC A7+$4 (D1) FFFFF A7+$8 (A2) FFFFF E A7+$C (PC rit) FFFFF A A7+$10(#LENGTH) FFFFFC A7+$12 (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return 16(A7) = $FFFFE8 + $10 = $FFFFF8
16 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE A7 (D0) FFFFEC A7+$4 (D1) FFFFF A7+$8 (A2) FFFFF E A7+$C (PC rit) FFFFF A A7+$10(#LENGTH) FFFFFC A7+$12 (#ARRAY) Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return 20(A7) = $FFFFE8 + $12 = $FFFFF8
17 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE A7 (D0) FFFFEC A7+$4 (D1) FFFFF A7+$8 (A2) FFFFF E A7+$C (PC rit) FFFFF A A7+$10(#LENGTH) FFFFFC A7+$12 val.rit. Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return 20(A7) = $FFFFE8 + $12 = $FFFFFC
18 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF E FFFFF4 (PC rit) A FFFFF8 (#LENGTH) FFFFFC val.rit. Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
19 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF E FFFFF4 (PC rit) A FFFFF8 (#LENGTH) FFFFFC val.rit. Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return
20 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF0 FFFFF4 FFFFF A A7 (#LENGTH) FFFFFC A7+$4 val.rit. Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return 4(A7) = $FFFFF8 + $4 = $FFFFFC
21 Parametri sulla pila: simulazione Stato della pila: FFFFE4 FFFFE8 FFFFEC FFFFF0 FFFFF4 FFFFF8 FFFFFC Codice: START MOVE.L #ARRAY, -(A7) * array location MOVE.L #LENGTH,-(A7) * array length BSR DO_SUM * call MOVE.L 4(A7), SUM * result ADD.L #8, A7 * reposition SP DO_SUM MOVEM.L D0-D1/A2,-(A7) * save regs MOVE.L 16(A7), D1 * array length MOVEA.L 20(A7), A2 * array location * loop MOVE.L D0, 20(A7) * write result MOVEM.L (A7)+,D0-D1/A2 * restores regs RTS * return A7+8 = $FFFFF8 + $8 = $
22 Uso dei record di attivazione SP (A7) FP (A6) SP prec FP prec temporanei registri salvati variabili locali indirizzo di ritorno argomenti in ingresso/uscita temporanei registri salvati variabili locali Una migliore realizzazione del meccanismo di chiamata a sottoprogramma fa uso dei record di attivazione (stack frame); Nel esistono istruzioni dedicate per allocare e distruggere i record di attivazione: LINK e UNLK; I record di attivazione formano una lista concatenata (in rosso nella figura); Per convenzione, il puntatore al record di attivazione corrente () è nel registro A6; Creazione del frame: LINK A6, #-N (N è la dimensione delle variabili locali) Distruzione del frame: UNLK A6 I parametri hanno spiazzamento positivo, esempio: il primo parametro.l sta a 8(A6) Le variabili locali hanno spiazzamento negativo, esempio: la prima var. locale.l sta a -4(A6)
23 Effetto dell' istruzione LINK Istruzione LINK A6, #N 1. [SP] = [SP] 4 riservo una long word sulla pila 2. [M([SP])] = [A6] salvo vecchio 3. [A6] = [SP] il ora punta alla cima della pila 4. [SP] = [SP] + N riservo spazio per le variabili locali (Attenzione: N è solitamente negativo) Prima del punto 1: (JSR appena eseguita) SP FP indirizzo di ritorno parametri in ingresso/uscita registri / temp variabili locali Dopo il punto 1: Dopo il punto 2: Dopo il punto 3: Dopo il punto 4: SP FP (spazio) indirizzo di ritorno parametri in ingresso/uscita registri / temp variabili locali SP FP indirizzo di ritorno parametri in ingresso/uscita registri / temp variabili locali SP FP indirizzo di ritorno parametri in ingresso/uscita registri / temp variabili locali SP FP variabili locali indirizzo di ritorno parametri in ingresso/uscita registri / temp variabili locali
24 Effetto dell' istruzione UNLK Istruzione UNLK A6 1. [SP] = [A6] la nuova cima della pila è il FP 2. [A6] = [M([SP])] ripristino il vecchio 3. [SP] = [SP] + 4 abbasso la cima della pila di una long word Prima del punto 1: Dopo il punto 1: Dopo il punto 2: Dopo il punto 3: (pronto per RTS) SP FP registri / temp variabili locali indirizzo di ritorno parametri in ingresso/uscita SP FP indirizzo di ritorno parametri in ingresso/uscita SP indirizzo di ritorno parametri in ingresso/uscita SP indirizzo di ritorno parametri in ingresso/uscita registri / temp registri / temp registri / temp registri / temp variabili locali variabili locali FP variabili locali FP variabili locali
25 Schema di funzione in assembly FUNZIONE: LINK A6, #-N * Riservo spazio per le var locali MOVEM.L D1-,-(SP) * Salvo i registri che uso * Preparazione a chiamata di funzione con due parametri MOVE.L, -(A7) * Push secondo parametro MOVE.L, -(A7) * Push primo parametro JSR ALTRA_FUNZIONE * Chiamata ADDQ.L #8, A7 * Pop parametri MOVEQ.L D0, * Uso il valore di ritorno di ALTRA_FUNZIONE MOVE.L, D0 * Imposto il valore di ritorno di FUNZIONE MOVEM.L (SP)+,D1- * Ripristino i registri UNLK A6 * Elimino var. locali RTS * Ritorno al chiamante
26 Esempio di traduzione di funzione Tradurre in assembly di un programma in linguaggio C: int CallingFunction(int x) { int y; CalledFunction(1,2); return 5; } void CalledFunction(int param1, int param2) { int local1, local2; local1 = param2; } Applichiamo le seguenti convenzioni: per semplicità non salviamo i registri; il chiamato lascia il valore di ritorno in D0; il chiamante abbatte la pila dopo la chiamata; usiamo la catena dei record di attivazione;
27 Esempio di traduzione di funzione Traduzione in assembly del programma di esempio: int CallingFunction(int x) { int y; LINK A6, #-4 * Riservo spazio per y } CalledFunction(1,2); MOVE.L #2, -(A7) * Push secondo parametro MOVE.L #1, -(A7) * Push primo parametro JSR _CalledFunction * Chiamata ADDQ.L #8, A7 * Pop parametri return 5; MOVEQ.L #5, D0 * Valore di ritorno in D0 UNLK A6 * Elimino var. locali RTS * Ritorno al chiamante void CalledFunction(int param1, int param2) { int local1, local2; LINK A6, #-8 * Riservo spazio per var. local1 = param2; MOVE.L 12(A6), -4(A6) * Assegnamento par.>var. UNLK A6 * Elimino var. locali RTS * Ritorno al chiamante }
28 Esempio completo È a disposizione un esercizio completo che illustra i meccanismi di chiamata a sottoprogramma, interamente svolto.
Passaggio di Parametri per Valore o Indirizzo
Passaggio di Parametri per Valore o Indirizzo Come in C, l assembler permette di passare un dato per valore (copia) o per indirizzo, nel secondo caso rendendo modificabile il dato stesso da dentro una
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Fondamenti di programmazione in linguaggio assembly del Motorola 68000
Fondamenti di programmazione in linguaggio assembly del Motorola 68000 Daniele Paolo Scarpazza [email protected] Politecnico di Milano Ultimo aggiornamento: 10 Maggio 2005 Bibliografia Libro
Istruzioni di trasferimento dati
Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:
Esercizi. Assembly. Alessandro A. Nacci [email protected] ACSO 2014/2014
Esercizi Assembly Alessandro A. Nacci [email protected] ACSO 2014/2014 1 RIPASSO Architettura dei registri del 68K Di (0 i 7): registri di dato a 8, 16, 32 bit Ai (0 i 7): resgistri di a 16, 32
Traduzione da C a Catena di compilazione
Traduzione da C a 68000 Vittorio Zaccaria Dicembre 2009 Catena di compilazione utilizzo di linguaggi intermedi di(ir) Analisi sintattica e trattamento degli errori Generazione del codice macchina linguaggio
ARM: stack e subroutine
ARM: stack e subroutine 05.d Le istruzioni di accesso allo stack L istruzione di chiamata a subroutine Gestione degli stack frame Istruzione di store multiplo (STM Le istruzioni LDR e STR operano su parole
#define N = 5. / funzione funz / int funz (int a, int b) { return (a + r) b; } / fine funzione / programma in linguaggio C
esercizio n. 5 linguaggio macchina prima parte codifica in linguaggio macchina Si deve tradurre in linguaggio macchina simbolico (linguaggio assemblatore) 68000 il programma (main e funzione funz) riportato
Calcolatori Elettronici
Calcolatori Elettronici Il linguaggio assemblativo MIPS (4) Le function (2) Gestione dei sottoprogrammi $a0 - $a3 - $v1 $ra : 4 registri argomento per il passaggio dei parametri : due registri per la restituzione
Tecniche di traduzione da C ad assembly 68000. Note generali
Tecniche di traduzione da C ad assembly 68000 Note generali Schema di compilazione da C ad assembly 68K Ispirato a GCC Fa uso di: banco di registri classi d istruzioni modi d indirizzamento e organizzazione
Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini
Architettura degli Elaboratori e delle Reti Il set istruzioni di MIPS Modalità di indirizzamento Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A.
< < } } Lezione 5 e 6 Accesso a memoria A questo livello di astrazione, la memoria viene vista come un array di byte Per ogni richiesta di un dato ad un certo indirizzo, la CPU ottiene un numero di byte
Programmazione Assembly per 8088: Esercizi svolti
Programmazione Assembly per 8088: Esercizi svolti Marco Di Felice 13 dicembre 2006 1 Esercizio 1 (esercizio 1 del Tanenbaum, Appendice C) TESTO. Dopo l esecuzione dell istruzione MOV AX, 702 qual è il
LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 15
LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 15 Prof. Rosario Cerbone [email protected] http://digilander.libero.it/rosario.cerbone a.a. 2005-2006 L'INDIRIZZAMENTO NEL PROCESSORE MC 68000
Modi di indirizzamento del processore MC68000 (parte seconda)
Corso di Calcolatori Elettronici I Modi di indirizzamento del processore MC68000 (parte seconda) Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso di Laurea
Linguaggio Assembly e linguaggio macchina
Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
Processore Danilo Dessì. Architettura degli Elaboratori.
Processore 8088 Architettura degli Elaboratori Danilo Dessì [email protected] Subroutine Anche nel linguaggio assemblativo è possibile suddividere un programma in subroutine Per invocare una subroutine
Linguaggio Assembly e linguaggio macchina
Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
Spazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - [email protected] // The function name says it all int stack_overflow (){
Linguaggio Assembly e linguaggio macchina
Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
Linguaggio macchina e linguaggio assembly
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Università degli Studi di Udine Linguaggio macchina e linguaggio assembly Formato delle istruzioni 15 8 7 0 gruppo modo di indirizzamento codice dell
Strutture di controllo del flusso di esecuzione in assembler. MC68000: Status Register
Corso di Calcolatori Elettronici I A.A. 2010-2011 Strutture di controllo del flusso di esecuzione in assembler Lezione 25 Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di
LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER
LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II Istruzioni di selezione Linguaggio ad alto livello Assembler
Modi di indirizzamento
Vari modi di specificare l indirizzo degli operandi Modi di indirizzamento Capitolo 11 Immediato Diretto Indiretto Registro Registro indiretto Spiazzamento Pila 1 2 Indirizzamento immediato L operando
Istruzioni di Controllo del Flusso Istruz. di Controllo di Flusso
Istruzioni di Controllo del Flusso Istruz. di Controllo di Flusso Salto Non Condizionato Salto Condizionato JMP jump BRA branch non condizionato BEQ branch if Equal BNE branch if Not Equal BCS branch if
Architettura di un calcolatore: Introduzione parte 2
Corso di Calcolatori Elettronici I Architettura di un calcolatore: Introduzione parte 2 Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle
Metodi di indirizzamento
Testo di rif.to: [Congiu] 4.3 (pg. 138 148) 02.b Metodi di indirizzamento Indirizzamento immediato Indirizzamento di registro Indirizzamenti in memoria Metodi di indirizzamento 1 Gli indirizzi degli operandi
ISA (Instruction Set Architecture) della CPU MIPS
Architettura degli Elaboratori Lezione 20 ISA (Instruction Set Architecture) della CPU MIPS Prof. Federico Pedersini Dipartimento di Informatica Uniersità degli Studi di Milano L16-20 1 Linguaggio macchina
Istruzioni assembler Istruzione N Registri
Istruzioni assembler Istruzione N Registri Aritmetica add a, b, c a = b+c addi a, b, num a = b + sub a, b, c a = b - c mul a, b, c a = b*c div a, b, c a = b/c utilizzati Descrizione 3 Somma. Somma b e
Introduzione alla famiglia Motorola 68000
Introduzione alla famiglia Motorola 68000 Maurizio Rebaudengo Matteo Sonza Reorda Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Storia Introduzione Registri interni Modi di indirizzamento
Il processore Motorola (MC68000)
Il processore Motorola 68000 (MC68000) Il processore Motorola 68000 è stato un processore innovativo, che ha visto la luce all inizio degli anni 80, ed il cui successo ha posto le basi per lo sviluppo
Esercitazione n. 3. Dott. Salvatore Pontarelli
Esercitazione n. 3 Dott. Salvatore Pontarelli Struttura di un modulo Assembly Assembly è il linguaggio che l ARM assembler (armasm) legge per produrre il codice oggetto. può essere: ARM assembly language
MODELLI DI MEMORIA e CALL
Corso di Archite?ura degli Elaboratori Modulo di Assembly MODELLI DI MEMORIA e CALL Bruno Iafelice University of Bologna iafelice at cs(dot)unibo(dot)it 1 ArgomenC Modelli di memoria per 8088 Chiamata
Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly
Esercitazione di Calcolatori Elettronici Ing. Battista Biggio Corso di Laurea in Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Richiami: v[i] e &v[i] v[i] è il valore dell elemento i nel vettore
S i m u l a z i o n e d i u n D M A c o n t r o l l e r
S i m u l a z i o n e d i u n D M A c o n t r o l l e r N e l l e o p e r a z i o n i d i I / O, q u a n d o l a v e l o c i t à d e l t r a - s f e r i m e n t o d e i d a t i a s s u m e u n v a l o
Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j
L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):
Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.
1 Capitolo 6 - Array Array Array Gruppo di locazioni di memoria consecutive Stesso nome e tipo Per riferirsi a un elemento, specificare Nome dell array Posizione Formato: arrayname[ position number ] Primo
Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
MIPS Instruction Set 2
Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general
ORG $8800 N DC 9,11,1,4,5,7,2
ESEMPI DI ASSEMBLY M68000 Esercizio 1 Scrivere un programma non segmentato in linguaggio macchina (simbolico), con sintassi nativa M6800, che rispetti la seguente specifica. Dati 7 numeri di tipo Word,
L'architettura del processore MIPS
L'architettura del processore MIPS Piano della lezione Ripasso di formati istruzione e registri MIPS Passi di esecuzione delle istruzioni: Formato R (istruzioni aritmetico-logiche) Istruzioni di caricamento
Microcontrollori 12/03/2014. Progettazione Sistemi Elettronici 2013/2014 1
Microcontrollori 2013/2014 1 Microcontrollori 2013/2014 2 Microcontrollori CPU Instruction set -CISC Complex Instruction Set Computing (Intel x86 family; Motorola 680x0) -RISC Reduced Instruction Set computer
AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000
AXO Achitettura dei Calcolatori e Sistema Operativo Instruction Set Architecture (ISA) e 68000 introduzione a ISA ISA - Instruction Set Architecture insieme delle istruzioni (instruction set) che possono
Un esempio di compilatore realizzato con flex e bison
POLITECNICO DI MILANO Dipartimento di Elettronica e Informazione Corso di Linguaggi Formali e Compilatori - Esercitazioni Un esempio di compilatore realizzato con flex e bison Progetto di Vincenzo Martena
Esercitazioni di Informatica 3
Esercitazioni di Informatica 3 Part I: Programming Languages Syntax and semantics Laurea in Ingegneria Informatica Politecnico di Milano Polo di Milano Leonardo Esercizio 1: EBNF Utilizzando il linguaggio
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA
Lezione n.11 n.11 Lezione n. 11 ARCHITETTURA INTERNA ARCHITETTURA ESTERNA CODICE MACCHINA MODI DI INDIRIZZAMENTO ARCHITETTURE A PIU' INDIRIZZI In questa lezione verranno introdotti i concetti di base relativi
Il linguaggio assembly
Il linguaggio assembly PH 2.3 (continua) 1 Argomenti Organizzazione della memoria Istruzioni di trasferimento dei dati Array Istruzioni logiche 2 1 La memoria del MIPS I contenuti delle locazioni di memoria
Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.
Architettura degli Elaboratori e delle Reti Lezione 16 Il linguaggio macchina Proff. A. Borghese, F. Pedeini Dipaimento di Scienze dell Informazione Univeità degli Studi di Milano L 16 1/32 Linguaggio
Il linguaggio assembly
Il linguaggio assembly Introduzione al linguaggio macchina Indice Che cos è l assembly Elementi del linguaggio Memoria di programma Registri interni e di I/O Registri particolari Rappresentazione dell
Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali
Prof. Gian Luca Marcialis Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto dei calcolatori
Gestione della Memoria
Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione
ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE
ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE Il computer o elaboratore è una macchina altamente organizzata capace di immagazzinare, elaborare e trasmettere dati con notevole precisione e rapidità. Schematicamente
STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET
Lo stack STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET Lo stack (tradotto talvolta in italiano con pila o catasta) è un'area di memoria privilegiata, dove il microprocessore può salvare
ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:
Università degli Studi di Milano Corso Architettura degli elaboratori e delle reti Prof. Cristina Silvano A.A. 2004/2005 Esame scritto del 15 luglio 2005 Cognome: Matricola: Nome: Istruzioni Scrivere solo
Università degli Studi di Cassino
Corso di Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M. Anno Accademico 2007/2008 Francesco Tortorella Istruzioni di confronto Istruzione Significato slt $t1,$t2,$t3 if
Pseudo-operatori. Lo pseudo-operatore ORG
Pseudo-operatori Viene usato per inizializzare il Program Location Counter (PLC) Sintassi: ORG $HEXADDR Lo pseudo-operatore END Viene usato per terminare il processo di assemblaggio e saltare all entry
Processore M68000: ulteriori istruzioni
Corso di Calcolatori Elettronici I Processore M68000: ulteriori istruzioni ing. Alessandro Cilardo Corso di Laurea in Ingegneria Biomedica Shift LSL, LSR shift logico a sinistra/destra Esempio: LSL.W #2,D2
Architettura di una CPU
Massimo VIOLANTE Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni 2 M. Violante 1.1
Introduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Capitolo 2 Istruzioni macchina
Capitolo 2 Istruzioni macchina 2.1. No; ogni sequenza binaria si può interpretare come un numero o come un istruzione. 2.2. Il contenuto dei byte in esadecimale, a partire dalla locazione 1000, sarà 43,
CAP. 4: Aspetti generali del Sistema Operativo Linux. l http://home.dei.polimi.it/silvano/acso.htm
Struttura interna del sistema Operativo Linux CAP. 4: Aspetti generali del Sistema Operativo Linux CAP. 5: Funzionalità del calcolatore l http://home.dei.polimi.it/silvano/acso.htm Funzionalità del Sistema
Richiami sull architettura del processore MIPS a 32 bit
Caratteristiche principali dell architettura del processore MIPS Richiami sull architettura del processore MIPS a 32 bit Architetture Avanzate dei Calcolatori Valeria Cardellini E un architettura RISC
Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni
Istruzioni macchina Linguaggio macchina Insieme delle istruzioni (instruction set) che la CPU puo eseguire Capitolo 10 1 2 Elementi di un istruzione macchina Codice operativo Specifica l operazione da
