Dal linguaggio macchina al linguaggio C

Documenti analoghi
Dal linguaggio macchina al linguaggio C

Programma sorgente, compilatore, file oggetto, file eseguibile. Traduzione effettuata dal compilatore. Dichiarazione di variabili (esempi)

Linguaggio macchina e linguaggio assembly

Linguaggio macchina e linguaggio assembler

Matricola Nome Cognome

Addendum: istruzioni linguaggio macchina. Università di Bergamo - corso di Calcolatori Elettronici 1

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Introduzione alla programmazione strutturata

Le procedure ricorsive Come eseguire un programma. Architettura degli Elaboratori e delle Reti, Turno I

x Matricola Nome Cognome

Matricola Nome Cognome

-128 in complemento a 2 su 8 bit , in complemento a 2 su 8 bit non possibile in binario puro su 8 bit non possibile

-128 in modulo e segno su 8 bit non possibile in complemento a 2 su 8 bit , in binario puro su 8 bit non possibile

Istruzioni di trasferimento dati

Linguaggi di alto livello, compilatori e interpreti

Assembly (3): le procedure

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Assembly (3): le procedure

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Architettura degli Elaboratori Lez. 3 ASM: Strutture di controllo. Prof. Andrea Sterbini

Assembly V: Procedure annidate e recursive

Perché il linguaggio C?

Fetch Decode Execute Program Counter controllare esegue prossima

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Architettura e funzionamento del calcolatore

Laboratorio di programmazione

Corso di Informatica

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Assembly IV Le procedure

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

La programmazione in linguaggio C

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14

Architettura dei calcolatori e sistemi operativi. Architettura MIPS e set istruzioni Capitolo 2 P&H

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Architetture dei Calcolatori

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri. Fondamenti di Informatica I prova in itinere

Linguaggi di alto livello, compilatori e interpreti

Istruzioni di controllo del flusso

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri. Fondamenti di Informatica I prova in itinere

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Calcolatori Elettronici

Architettura di una CPU

Assembly MIPS: le procedure

3 aprile o Esonero: mercoledi 17 aprile ore 11:30 14:00 consulta la pag. WEB alla voce esoneri. si raccomanda la puntualita!

Istruzioni e linguaggio macchina

Perché il linguaggio C?

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Descrizione di un algoritmo

Tecniche di compressione senza perdita

Esempi di Programmi Assembly. Luigi Palopoli, Luca Abeni

Strutture di Controllo

Il primo programma C++

Architettura degli Elaboratori

Linguaggi di Programmazione

Lezione 6 Introduzione al C++ Mauro Piccolo

Esercitazione di Reti degli elaboratori

15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio

Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione

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

Architettura e funzionamento del calcolatore

Fondamenti di Informatica. Ingegneria elettronica

2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

Programmazione in C. La struttura del programma Variabili, espressioni, operazioni

Introduzione alla programmazione in linguaggio C

Il Linguaggio Assembly: Controllo del flusso: istruzioni e costrutti

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Struttura di un. Struttura dei programmi C

Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:

Dati due punti sul piano calcolare la loro distanza

Linguaggi di programmazione

Introduzione al linguaggio C Primi programmi

Classe III A. A.s Programma di Informatica 5 ore settimanali (3 laboratorio) Docenti. Prof. Alberto Ferrari Prof.

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1

Architettura degli Elaboratori

Introduzione. Architettura

Corso di Informatica

Octave. Luca Abeni. Informatica Luca Abeni 1 / 21

Lezione 17 Il Set di Istruzioni (3)

Assegnazione di una variabile

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

Programmi in Assembly

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

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

Corso di Architettura (Prof. Scarano) 09/04/2002

Tela (Teaching Language)

Istruzioni e linguaggio macchina

Introduzione. Programma didattico

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

Programma svolto informatica a.s. 2017/2018. Classe 1D

Transcript:

FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Università degli Studi di Udine Dal linguaggio macchina al linguaggio C

Programma sorgente, compilatore, file oggetto, file eseguibile programma sorgente (uno o più file ASCII) compilatore...... file oggetto (binari) librerie (simili ai file oggetto) linker... file eseguibile (binario)

Traduzione effettuata dal compilatore Dichiarazione di variabili spazi di memoria, di dimensioni opportune, riservati ai dati Espressioni traduzione in sequenze di istruzioni aritmetico-logiche Istruzioni di controllo traduzione con sequenze di istruzioni di controllo

Dichiarazione di variabili (esempi) int n = 5; char v[5]; n: word 5 v: byte 0 byte 0 byte 0 byte 0 byte 0

Espressioni (esempio) int n, x = 12, y = 64; n = x + y + 3; n: word 0 x: word C y: word 40... LDWI R0 3 LDWA R1 x ADD R1 R0 LDWA R1 y ADD R1 R0 STWA R0 n

if <condizione> { <istruzioni> } Y N ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni cont:... ; seguito del programma

if <condizione> { <istruzioni> } SE LA CONDIZIONE È VERA... ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni cont:... ; seguito del programma Y N

if <condizione> { <istruzioni> } SE LA CONDIZIONE È FALSA... ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni cont:... ; seguito del programma Y N

if <condizione> { <istruzioni ramo then> } else { <istruzioni ramo else> } ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ else... ; istruzioni ramo then... ; istruzioni ramo then JMP cont else:... ; istruzioni ramo else... ; istruzioni ramo else cont:... ; seguito del programma Y N

if <condizione> { <istruzioni ramo then> } else { <istruzioni ramo else> } SE LA CONDIZIONE È VERA... ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ else... ; istruzioni ramo then... ; istruzioni ramo then JMP cont else:... ; istruzioni ramo else... ; istruzioni ramo else cont:... ; seguito del programma Y N

if <condizione> { <istruzioni ramo then> } else { <istruzioni ramo else> } SE LA CONDIZIONE È FALSA... ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ else... ; istruzioni ramo then... ; istruzioni ramo then JMP cont else:... ; istruzioni ramo else... ; istruzioni ramo else cont:... ; seguito del programma Y N

while <condizione> { <istruzioni> } Y N loop:... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni del ciclo... ; istruzioni del ciclo JMP loop cont:... ; seguito del programma

while <condizione> { <istruzioni> } SE LA CONDIZIONE È VERA... loop:... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni del ciclo... ; istruzioni del ciclo JMP loop cont:... ; seguito del programma Y N

while <condizione> { <istruzioni> } SE LA CONDIZIONE È FALSA... loop:... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPZ cont... ; istruzioni del ciclo... ; istruzioni del ciclo JMP loop cont:... ; seguito del programma Y N

do { <istruzioni> } while <condizione> Y N loop:... ; istruzioni del ciclo... ; istruzioni del ciclo... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPNZ loop cont:... ; seguito del programma

do { <istruzioni> } while <condizione> SE LA CONDIZIONE È VERA... loop:... ; istruzioni del ciclo... ; istruzioni del ciclo... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPNZ loop cont:... ; seguito del programma Y N

do { <istruzioni> } while <condizione> SE LA CONDIZIONE È FALSA... loop:... ; istruzioni del ciclo... ; istruzioni del ciclo... ; valutazione della... ; condizione ; l espressione della condizione ha ; modificato il flag Z ; ipotesi: Z=0 vero, Z=1 falso JMPNZ loop cont:... ; seguito del programma Y N

Funzioni: chiamata Per gestire le chiamate di funzioni viene utilizzato lo stack di sistema: push (variabili locali) copia degli argomenti della funzione in registri o aree di memoria convenzionali push (program counter corrente) program counter indirizzo della funzione

Funzioni: ritorno copia del valore di ritorno in un registro o area di memoria convenzionale program counter pop () pop (variabili locali) L utilizzo dello stack anche per le variabili consente la ricorsione!

Esempio: Fibonacci Si scriva in linguaggio assembler una funzione recursiva che restituisca in R0 il valore del termine F n della successione di Fibonacci il cui numero d ordine, n, è passato alla funzione in R1 Si ricorda che: F 0 = 0 F 1 = 1 F n = F n-1 + F n-2

Esempio: Fibonacci Partiamo dal programma in linguaggio C Nota: in questo esercizio, per semplicità, useremo soltanto variabili nei registri (cioè non in memoria centrale) e non faremo uso di funzioni di input/output

Esempio: Fibonacci int main() { int R1 = 10; int R0 = fibo (R1); } int fibo (int R1) { if (R1 == 0) return 0; if (R1 == 1) return 1; } return fibo (R1-1) + fibo (R1-2);

Esempio: Fibonacci (main) ; int main() ; { START: LDWI R10 0F000 SPWR R10 LDWI R1 0A ; int R1 = 10; CALL FIBO ; int R0 = fibo (R1); HLT ; }

Funzione FIBO - Parte I FIBO: ; int fibo (int R1) ; { MV R1 R2 JMPNZ CONT_1 ; if (R1 == 0) XOR R0 R0 ; return 0; RET CONT_1: LDWI R2 1 SUB R1 R2 JMPNZ CONT_2 ; if (R1 == 1) LDWI R0 1 ; return 1; RET

Funzione FIBO - Parte II CONT_2: DEC R1 PUSH R1 CALL FIBO ; /* chiama fibo (R1-1); */ POP R1 MV R0 R2 DEC R1 PUSH R1 PUSH R2 CALL FIBO ; /* chiama fibo (R1-2); */ POP R2 POP R1 ADD R2 R0 RET ; return fibo (R1-1) + fibo (R1-2); ; }