LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER

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

Alcuni programmi assembly MC68000

Processore M68000: ulteriori istruzioni

Introduzione alla programmazione assembly

Passaggio di Parametri per Valore o Indirizzo

ORG $8800 N DC 9,11,1,4,5,7,2

Pseudo-operatori. Lo pseudo-operatore ORG

Introduzione al linguaggio assembly MC68000

MC68000: programmazione assembly

LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 15

ASSEMBLER 68K parte 2

Istruzioni di Controllo del Flusso Istruz. di Controllo di Flusso

Modi di indirizzamento del processore MC68000 (parte prima)

AMBIENTE DI SIMULAZIONE ASIM

Tecniche di traduzione da C ad assembly Note generali

Assemblaggio per il processore Motorola 68000

Modi di indirizzamento del processore MC68000 parte 1

Fondamenti di programmazione in linguaggio assembly del Motorola 68000

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

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

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

Il processore Motorola (MC68000)

Modi di indirizzamento del processore MC68000 (parte prima)

ASSEMBLER 68K parte 1

Lezione 12. Assembly II. Set di Istruzioni MIPS Strutture di controllo in Assembly

Il linguaggio assembly

Architettura degli Elaboratori

Le strutture di controllo in C++

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

#define N = 5. / funzione funz / int funz (int a, int b) { return (a + r) b; } / fine funzione / programma in linguaggio C

Istruzioni di trasferimento dati

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

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

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

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

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Traduzione da C a Catena di compilazione

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

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

Istruzioni assembler Istruzione N Registri

Elementi di Informatica e Programmazione

Istruzioni iterative (o cicliche)

Struttura di programmi MAL Elementi lessicali

Transcript:

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 MC 68000:. if (espressione) istruzione; istruzione_successiva. istruzione può essere un compound statement. B(NOT condizione) labela istruzione.... labela istruzione_successiva

Istruzioni di selezione in assembler Esempio: if (D0 == 5) { D1++; D2=D1; } D2 = D0; Codifica in C CMPI.L #5,D0 ;confr. D0 con 5 BNE SKIP ;salta se D0 5 ADDQ.L #1,D1 ;esegui se D0=5 MOVE.L D1,D2 SKIP MOVE.L D0,D2 Codifica in assembler

Istruzioni di selezione in assembler Linguaggio ad alto livello:. if (espressione) istruzione1 else istruzione2 istruzione_successiva Assembler MC 68000: B(NOT condiz.) labela istruzione1 BRA labelb labela istruzione2 labelb istruzione_successiva

Istruzioni di selezione in assembler if (D0 < 5) {D0++; } else {D0=0; } D1=D0 Codifica in C CMPI.L #5,D0 *confr. D0 con 5 BHS ELSE *salta se D0 5 ADDQ.L #1,D0 *esegui se D0<5 BRA CONTN *evita ramo ELSE ELSE CLR.L D0 *esegui se D0 5 CONTN MOVE.L D0,D1 *continua Codifica in assembler

Strutture iterative in assembler Linguaggio ad alto livello: do istruzione; while (condizione ==TRUE); istruzione_successiva; Assembler MC 68000: labela istruzione Bcc labela istruzione_successiva

Strutture iterative in assembler Esempio: calcola 3^N (N>0) senza effettuare il controllo sull'overflow D0=1; D1=1; do { D0=D0*3; D1++; } while (D1<=N); MOVE.B #N,D2 ;D2 = esponente N MOVE.B #1,D1 ;D1 conta le iterazioni MOVE.W #1,D0 ;D0 inizializzato a 1 LOOP MULU.W #3,D0 ;D0 contiene i prodotti parziali ADDQ.B #1,D1 ;il contatore viene incrementato CMP.B D2,D1 ;e confrontato con N BLE LOOP ;itera il ciclo se D1 N MOVE.L D0,VAR ;memorizza il risultato

Strutture iterative in assembler Linguaggio ad alto livello: while (condizione == TRUE) istruzione; istruzione_successiva; Assembler MC 68000: labela labelb BRA labelb istruzione Bcc labela istruzione_successiva

Strutture iterative in assembler Esempio: calcola 3^N (N 0) senza effettuare il controllo sull'overflow LOOP TEST D0 = 1; D1 = 1; while (D1 <= N) { D0 = D0*3; D1++} MOVE.B #N,D2 ; MOVE.B #1,D1 ; inizializzazioni MOVE.W #1,D0 ; BRA TEST ;va ad effettuare prima il test MULU.W #3,D0 ADDQ.B #1,D1 CMP.B D2,D1 ;se N=0 non viene effettuato BLE LOOP ;alcun ciclo, e D0 contiene 1

DBcc Test condition, decrement, and branch DBcc Dn,<label> Dn: registro dati impiegato come contatore di iterazioni a decrescere. label: associata alla prima istruzione del ciclo. DBcc supporta le stesse condizioni logiche cc di Bcc. Sono inoltre possibili i casi DBF (cc = false) DBT (cc = true) Alcuni assemblatori usano DBRA come sinonimo di DBF.

DBcc Dn,<label> Semantica cc==true? NO Dn Dn-1 YES IF(condition false) THEN [Dn] [Dn] 1 {decrement loop counter} IF [Dn] = -1 THEN [PC] [PC]+2{goto next instruction} ELSE [PC] [PC] + d {take branch} ELSE [PC] [PC] + 2 {goto next instruction} NO Dn==-1? Branch to label YES Execute next instruction

Decrement and branch always: DBRA DBRA equivale a DBF: caso particolare di DBcc con cc=false Esempio: equivale a: MOVE.L #N,D1 MOVE.L #N,D1 SUBQ.L #1,D1 SUBQ.L #1,D1 MOVEA.L #NUM,A2 MOVEA.L #NUM,A2 CLR.L D0 CLR.L D0 LOOP ADD.W (A2)+,D0 LOOP ADD.W (A2)+,D0 DBRA D1,LOOP SUBQ #1,D1 MOVE.L D0,SOMMA BGE LOOP MOVE.L D0,SOMMA

Esercizio Assegnati due byte allocati agli indirizzi di memoria A e B, nella locazione di memoria RES viene memorizzato il numero di bit omologhi uguali di A e B. Il programma usa l'istruzione aritmetica EOR. A B 10010111 10101101 D 00111010 4 10 RES 00000100

*Area Istruzioni ORG $8000 START MOVE.B A,D0 * Sposta il primo valore in D0 MOVE.B B,D1 * Sposta il secondo valore in D1 EOR.B D0,D1 * OR esclusivo bit a bit tra D0 e D1 e risultato in D1 MOVE. B#7,D2 * Inizializza il registro contatore D2 a 7 CLR.L D3 * Azzera D3 destinato a contenere il risultato LOOP BTST D2,D1 * Controlla il D2-esimo bit di D1 BNE DEC * Se è 1 salta a DEC ADDQ #1,D3 * incrementa D3 perché i bit omologhi erano uguali DEC DBRA D2,LOOP * Decrementa D2 e ripete il ciclo se D2 >= 0 MOVE.B D3,RES * Sposta il risultato in memoria STOP #$2000 * Mette il processore in attesa di interruzioni * Area Dati ORG $8800 A DC.B %10100110 * primo byte B DC.B %01101110 * secondo byte RES DS.B 1 * area di storage del risultato END START