PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO

Documenti analoghi
ESERCIZIO: LETTURA DI UNA STRINGA (una serie di caratteri fino al carattere di INVIO) con funzioni DOS

Interazione con il DOS e il BIOS

; ; Definizione costanti

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Calcolatori Elettronici

Programmazione Assembly per 8088: Esercizi svolti

LABORATORIO DI SISTEMI

Assembly Introduzione Rev. Digitale 1.0 del 01/09/2016

Assembler Intel 80x86: Struttura di un programma e Direttive

Sistema Operativo - Gestione della Memoria lista argomenti di studio

Programmazione in linguaggio assembly per architetture Intel 8088

Istruzioni di modifica della sequenza di elaborazione

iafelice at cs(dot)unibo(dot)it

1 Programmi modulari in Assembly

Famiglia dei processori INTEL

Il linguaggio Assembly

Assembly. Modello x86

LINGUAGGIO ASSEMBLER PER 8086/8088

LA CPU INTEL Vantaggi dei programmi Assembly

CALCOLATORI ELETTRONICI II

Esercizi per il recupero del debito formativo:

Architettura degli Elaboratori

Introduzione al linguaggio assembly MC68000

Calcolatori Elettronici Lezione A2 Architettura i8086

Architettura degli Elaboratori

not ah ; ah = F7h (247) perche' il complemento a 1 di 8 ( )

Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086)

1.1.1 Esercizio conta le occorrenze di un carattere in una stringa

DOLLAR EQU '$' ; nome e cognome possono avere al max questa lunghezza. ; N.B. ogni stringa deve terminare con '$'

Consegne estive per gli studenti con sospensione del giudizio nella materia Sistemi per l'elaborazione e la trasmissione dell'informazione.

)21'$0(17,',,1)250$7,&$,,

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi

Dal linguaggio macchina al linguaggio C

Assembler 8086/8088: Concetti Generali

Bus Indirizzi a 20 bit. Anno 1979 Bus Indirizzi a 20 bit Bus Dati a 8 bit Set di istruzioni compatibile con 8086

Nel microprocessore 8086 abbiamo una gran quantità di registri

PROGRAMMI DI SVILUPPO. G. Frosini - Programmi di sviluppo Slide 1

Famiglia x86. Linguaggio Assembler

A. Veneziani - Analisi listato con assembly in line mixato a C (C++ Builder 6) Individua se un numero e' primo e tutti i numeri primi da 1 a n

Il linguaggio assembly 8086

Numeri Reali. Sottoinsieme discreto dei Numeri Razionali. Sequenze di bit. Underflow. Densità che dipende dal numero di bit usati

Sintassi di mov. Un istruzione (p.es. ) non può avere sorgente m e destinazione m

Compilatore (Compiler)

Architettura degli elaboratori (A)

jne su1 mov ah,2 add dl,48 int 21h mov ah,2 add dh,48 mov dl,dh int 21h mov ah,4ch int 21h

MODELLI DI MEMORIA e CALL

CORSO DI ARCHITETTURA DEGLI ELABORATORI Il Processore 8088

Processore Danilo Dessì. Architettura degli Elaboratori.

LINGUAGGIO ASSEMBLER PER 8086/8088

Sistemi Operativi 1. Mattia Monga. a.a. 2008/09. Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Sistemi Operativi. Bruschi Martignoni Monga. Gestione della memoria. Sistemi multiprogrammati. Partizioni fisse Partizioni variabili Paginazione

Assembler Intel 80x86: Set delle istruzioni

In questa parte di lezione vedremo come vengono trattati gli indirizzi durante la produzione e poi durante l esecuzione di un file eseguibile.

Il linguaggio assembly

CALCOLATORI ELETTRONICI II

Introduzione a ISA. Il Livello ISA Instruction Set Level Architecture. Livello ISA e Motorola 68000: introduzione. Che cosa descrive ISA

Dal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione

Sistema Operativo - Gestione della Memoria per moderne CPU. Address Binding Dinamico in esecuzione mediante Segmentazione, Paginazione e Memoria

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

È consuetudine classificare le istruzioni macchina in base al numero degli operandi a cui

LABORATORIO DI SISTEMI

I sistemi. Sistema: è un insieme di parti o componenti correlati tra di loro in modo che tale insieme possieda una struttura e abbia un comportamento.

Gestione delle subroutine. Appunti di Sistemi per la cl. IV Dinf A cura del prof. Ing. Mario Catalano

Corso di Architettura (Prof. Scarano) 10/05/2002

Dal linguaggio macchina al linguaggio C

1 Segmentazione degli indirizzi di memoria nell'8086

Linguaggio assembly per microprocessore 8086

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

SISTEMA DI ELABORAZIONE

Architetture dei Sistemi Elettronici

Linguaggi e moduli. Dott. Franco Liberati

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

Il linguaggio Assembly

Preprocessing, compilazione ed esecuzione. Utilizzando strumenti GNU...

Fetch Decode Execute Program Counter controllare esegue prossima

; programma MOV AX, DATO_1. ; somma al contenuto dell' accumulatore il contenuto del registro B

LABORATORIO DI SISTEMI

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

Linguaggi di programmazione. Parte VII. Traduzione e collegamento. Interpretazione. Traduzione

Parte VII. Traduzione e collegamento

Linguaggi, compilatori e interpreti

Parte VII. Traduzione e Collegamento

Orologio Digitale. Obiettivo. Analisi Hardware. Il TIC

Linguaggio macchina e linguaggio assembly

I programmi Assembler e Linker

La Produzione dei Programmi. 1 Il processo di Traduzione 1.1 compilazione 1.2 collegamento 1.3 caricamento 2. Il processo di Interpretazione

Esercizi sul linguaggio Assembler

1.1 Rappresentazione di numeri naturali ed interi

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086.

Esercizi con l assemblatore NASM

MASSIMO UBERTINI ASSEMBLER

Linguaggi, compilatori e interpreti

Il linguaggio Assembly della CPU Il linguaggio Macchina

FSUB % ST (1), % ST (0) # ST (0) ST (0) ST (1) FSUB %ST(0), %ST(1) # ST (1) ST (0) ST (1) #cima alla pila ST(0) / ST(1)

Transcript:

PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO Programma diviso in due moduli: MA.ASM: programma pricipale e funzioni di utilità MB.ASM: sottoprogramma di elaborazione Primo modulo: MA.ASM EXTRN alfa: BYTE EXTRN beta: WORD EXTRN sotto: FAR utility SEGMENT PUBLIC CODE tastiera PROC FAR ; acquisisce in al il carattere da tastiera tastiera ENDP video PROC FAR ; invia al video il carattere in al video ENDP dos LABEL FAR ; ritorna al DOS utility ENDS pila pila SEGMENT stack STACK DB 100h dup ('stack ') ENDS dati SEGMENT PUBLIC DATA kappa DB 8 dup (?) dati ENDS codice SEGMENT PUBLIC CODE ASSUME cs:codice, ds:dati inizio: mov ax, SEG dati mov ds, ax ciclo: call tastiera cmp al, 0dh je fine mov bx, SEG alfa mov es, bx mov es:alfa, al; pone al in alfa mov es:beta, OFFSET kappa mov es:beta + 2, SEG kappa call sotto mov al, 20h; carattere spazio mov si, 0 ripeti: mov al, [kappa + si] ; invia a video kappa[si] inc si cmp si, 8 jb ripeti mov al, 0dh ; CR mov al, 0ah ; LF jmp ciclo fine: jmp dos codice ENDS END inizio Sviluppo ASM 1 Sviluppo ASM 2

Secondo modulo: MB.ASM par SEGMENT PUBLIC DATA PUBLIC alfa, beta alfa DB? beta DW 2 dup (?) par ENDS codice SEGMENT PUBLIC CODE PUBLIC sotto ASSUME cs:codice, ds:par sotto PROC far ; converte il valore in alfa in una stringa ASCII in binario; ; indirizzo far della stringa: variabile beta push ax push bx push si push ds push es mov ax, SEG par mov ds, ax mov al, ds:alfa mov bx, ds:beta ; sposta indirizzo mov es, ds:beta + 2 ; come les bx, ds:[beta] mov si, 0 ciclo: test al, 80h; verifica il bit al[7] je zero mov byte ptr es:[bx + si], 1 jmp avanti zero: mov byte ptr es:[bx + si], 0 avanti: shl al, 1 inc si cmp si, 8 jb ciclo sotto codice pop es pop ds pop si pop bx pop ax ret ENDP ENDS END Sviluppo ASM 3 Sviluppo ASM 4

Programma Assemblatore - I passo: Per ogni modulo: 1) Attribuzione alle istruzioni e alle variabili di un offset all interno del segmento (uso di un contatore di locazioni) Contatore di locazioni (in hex) per MA.ASM 0000 EXTRN alfa: BYTE EXTRN beta: WORD EXTRN sotto: FAR 0000 utility SEGMENT PUBLIC CODE tastiera video dos LABEL FAR ; ritorna al DOS 0017 utility ENDS 0000 pila SEGMENT stack STACK DB 100h dup ( stack ) 0800 pila ENDS 0000 dati SEGMENT PUBLIC DATA 0000 kappa DB 8 dup (?) 0008 dati ENDS 0000 codice SEGMENT PUBLIC 0000 inizio: mov ax, SEG dati 0003 mov ds, ax 0005 ciclo: call tastiera 0036 mov si, 0 0039 ripeti: mov al, [kappa + si] Sviluppo ASM 5 003D ; invia a video kappa[si] 0056 jmp ciclo 0058 fine: jmp dos 005D codice ENDS END inizio 2) Tabella dei segmenti MA.ASM Segmento Lung. Tipo Classe utility 0017 public CODE pila 0800 stack STACK dati 0008 public DATA codice 005D public CODE 3) Tabella dei simboli per MA.ASM: Nome Tipo Segmento:Offset kappa byte dati:0000 inizio near codice:0000 ciclo near codice:0005 ripeti near codice:0039 fine near codice:0058 4) Tabella dei nomi pubblici (cioè nomi importati) (sottoinsieme della Tabella dei simboli): vuota 5) Tabella dei nomi esterni (cioè nomi esportati) MA.ASM: Nome Tipo alfa byte beta word sotto far Sviluppo ASM 6

Secondo modulo: MB.ASM Contatore di locazioni: 0000 par SEGMENT PUBLIC DATA PUBLIC alfa, beta 0000 alfa DB? 0001 beta DW 2 dup (?) 0005 par ENDS 0000 codice SEGMENT PUBLIC CODE PUBLIC sotto 0000 sotto PROC far 0018 ciclo: test al, 80h 001A je zero 001C mov byte ptr es:[bx + si], 1 0020 jmp avanti 0023 zero: mov byte ptr es:[bx + si], 0 0027 avanti: shl al, 1 0035 sotto ENDP 0035 codice ENDS END Tabella dei simboli per MB.ASM: Nome Tipo Segmento:Offset alfa byte par:0000 beta word par:0001 sotto far codice:0000 ciclo near codice:0018 zero near codice:0022 avanti near codice:0027 Tabella dei nomi esterni per MB.ASM: vuota Tabella dei nomi pubblici per MB.ASM: Nome Tipo Segmento:Offset alfa byte par:0000 beta word par:0001 sotto far codice:0000 Tabella dei Segmenti per MB.ASM: Segmento Lung. Tipo par 0005 none codice 0035 none Sviluppo ASM 7 Sviluppo ASM 8

Programma Assemblatore - II passo: 1) Traduzione delle istruzioni e delle direttive per la definizione delle variabili esempio: mov ds, ax 8E D8 Per gli indirizzi, la componente segmento non è tradotta (vedi 0000s) la componente offset ha il valore del corrispondente contatore di locazioni, con l'attributo r (rilocabile) i simboli esterni hanno offset 0000e MA.ASM: 000E BB 0000s mov bx, SEG alfa 0011 8E C3 mov es, bx 0013 26:A2 0000e mov es:alfa, al 0017 26:C7 06 0000e 0000 mov es:beta, OFFSET kappa 001E 26:C7 06 0002e 0000s mov es:beta + 2, SEG kappa 0025 9A 00000000se call sotto MB.ASM: 0005 B8 0000s mov ax, SEG par 0008 8E D8 mov ds, ax 000A A0 0000r mov al, alfa 000D 8B 1E 0001r mov bx, beta Sviluppo ASM 9 0011 8E 06 0003r mov es, beta + 2 2) Costruzione della Tabella di collegamento con gli indirizzi (segmento simbolico e offset numerico) delle word da modificare nel codice oggetto in corrispondenza ai segmenti e agli offset ancora simbolici MA.ASM (in grassetto le word da modificare): 000E BB 0000s mov bx, SEG alfa 0011 8E C3 mov es, bx 0013 26:A2 0000e mov es:alfa, al 0017 26:C7 06 0000e 0000r mov es:beta, OFFSET kappa 001E 26:C7 06 0002e 0000s mov es:beta + 2, SEG kappa 0025 9A 00000000se call sotto Tenendo conto dei valori del contatore di locazioni per le istruzioni (colonna a sinistra), gli offset delle word da modificare nello spezzone di programma sono: 000F, 0015, 001A, 0021, 0023, 0026, 0028. Si noti che - OFFSET kappa è già risolto e non deve essere trattato - SEGMENT kappa deve essere trattato perchè dipende dalla posizione del segmento al momento del caricamento Sviluppo ASM 10

Tabella di collegamento per MA.ASM (spezzone): Segmento:Offset Operando segmento Operando offset della word codice:000f SEG alfa - codice:0015 - OFFSET alfa codice:001a - OFFSET beta codice:0021 - OFFSET beta codice:0023 SEG dati - codice:0026 - OFFSET sotto codice:0028 SEG sotto - MB.ASM (in grassetto le word da modificare): 0005 B8 0000s mov ax, SEG par 0008 8E D8 mov ds, ax 000A A0 0000r mov al, ds:alfa 000D 8B 1E 0001r mov bx, ds:beta 0011 8E 06 0003r mov es, ds:beta + 2 Offset della word da modificare: 0006. Tabella di collegamento per MB.ASM: Segmento:Offset Operando segmento Operando offset della word codice:0006 SEG par - Sviluppo ASM 11 Programma Collegatore Il linker compie le operazioni di collegamento e pone in sequenza i vari moduli 1) Associazione dei segmenti simbolici a segmenti numerici: relazione utilizzata (allineamento al paragrafo): num_seg = num_seg_preced + (lung_seg_preced + 15) / 16 Tabella dei segmenti numerici (unica per tutti i moduli): Segmento Segmento numerico utility 0000 codice (ma) 0000 ; sono combinati insieme codice (mb) 0000 pila 000A dati 008A par 008B I segmenti sono combinati per la clausola public 2) Tabella dei nomi globali: prodotta unendo le Tabelle dei nomi pubblici e le Tabella dei segmenti numerici Tabella dei nomi globali: Nome Segmento numerico:offset alfa 008B:0000 beta 008B:0001 sotto 0000:0060 Sviluppo ASM 12

3) Tabella numerica di inizializzazione Registro Valore IP 0000 CS 0000 (codice) SP 0800 SS 008A (pila) 4) Trasformazione dei segmenti e degli operandi simbolici presenti nelle Tabelle di collegamento in valori numerici: Segmenti dalla Tabella dei segmenti numerici; Operandi segmento dalla Tabella dei segmenti numerici per simboli interni dalla Tabella dei nomi globali per simboli esterni Operandi offset dalla Tabella dei nomi globali Tabella numerica di collegamento per MA.ASM: Segmento:Offset Operando segmento Operando offset 0000:000F 008B - 0000:0015-0000 0000:001A - 0001 0000:0021-0001 0000:0023 008A - 0000:0026-0000 0000:0028 0000 - Tabella numerica di collegamento per MB.ASM (unico segmento) partendo dalla fine del precedente codice 60 byte 0000:0066 008B - 5) Modifica le word nel programma come indicato nelle Tabelle numeriche di collegamento: il programma è Sviluppo ASM 13 pronto per l esecuzione (va soltanto rilocato e caricato in memoria). 6) Genera per il Caricatore la Tabella di rilocazione, con gli indirizzi delle word che contengono segmenti numerici (vanno modificate al caricamento). Tabella di rilocazione: 0000:000F 0000:0023 0000:0028 0000:0066 Il programma eseguibile è composto da: Ÿ Ÿ Ÿ il programma collegato la Tabella di rilocazione la Tabella numerica di inizializzazione Programma Caricatore (nel DOS): 1) Sceglie la base dell'intero programma e la somma alle word della Tabella di rilocazione e ai due segmenti nella Tabella numerica di inizializzazione 2) Carica il programma in memoria; pone in SS e SP i valori corrispondenti, pone sullo stack CS e IP ed avvia il programma Sviluppo ASM 14