PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO
|
|
|
- Gianmaria Corradini
- 9 anni fa
- Просмотров:
Транскрипт
1 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
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
3 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, 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
4 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], jmp avanti 0023 zero: mov byte ptr es:[bx + si], avanti: shl al, 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
5 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 E C3 mov es, bx :A2 0000e mov es:alfa, al :C e 0000 mov es:beta, OFFSET kappa 001E 26:C e 0000s mov es:beta + 2, SEG kappa A se call sotto MB.ASM: 0005 B8 0000s mov ax, SEG par E D8 mov ds, ax 000A A0 0000r mov al, alfa 000D 8B 1E 0001r mov bx, beta Sviluppo ASM E r 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 E C3 mov es, bx :A2 0000e mov es:alfa, al :C e 0000r mov es:beta, OFFSET kappa 001E 26:C e 0000s mov es:beta + 2, SEG kappa A se 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, 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
6 Tabella di collegamento per MA.ASM (spezzone): Segmento:Offset Operando segmento Operando offset della word codice:000f SEG alfa - codice: OFFSET alfa codice:001a - OFFSET beta codice: OFFSET beta codice:0023 SEG dati - codice: OFFSET sotto codice:0028 SEG sotto - MB.ASM (in grassetto le word da modificare): 0005 B8 0000s mov ax, SEG par E D8 mov ds, ax 000A A0 0000r mov al, ds:alfa 000D 8B 1E 0001r mov bx, ds:beta E r mov es, ds:beta + 2 Offset della word da modificare: 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
7 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 : :001A : : A : : Tabella numerica di collegamento per MB.ASM (unico segmento) partendo dalla fine del precedente codice 60 byte 0000: B - 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: : :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
Interazione con il DOS e il BIOS
Interazione con il DOS e il BIOS ARGOMENTI PRESENTATI IN QUESTI LUCIDI Routine di BIOS e DOS Due modalità diverse di restituire il controllo al DOS L interazione con le routine del DOS: l interrupt 21H
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
Assembler Intel 80x86: Struttura di un programma e Direttive
Assembler Intel 80x86: Struttura di un programma e Direttive Calcolatori Elettronici B a.a. 2004/2005 Massimiliano Giacomin 1 Istruzioni e direttive Formato generale dei comandi: [nome] codice operazione
Programmazione in linguaggio assembly per architetture Intel 8088
Programmazione in linguaggio assembly per architetture Intel 8088 Marco Di Felice 1 Università of Bologna Dipartimento di Scienze dell Informazione Corso di Architettura degli Elaboratori mail: [email protected]
Istruzioni di modifica della sequenza di elaborazione
Istruzioni di modifica della sequenza di elaborazione Permettono di modificare la sequenza di esecuzione delle istruzioni di un programma, normalmente controllata dal meccanismo automatico di avanzamento
Il linguaggio Assembly
Il linguaggio Assembly Linguaggio macchina Linguaggio definito da un insieme di istruzioni, codificate come stringhe di bit, che il processore può interpretare ed eseguire direttamente Linguaggio Assembly
Assembly. Modello x86
Assembly Modello x86 1 Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2 Caratteristiche del microprocessore
CALCOLATORI ELETTRONICI II
CALCOLATORI ELETTRONICI II L ASSEMBLATORE Microsoft MASM MASM Argomenti della lezione Faremo riferimento al linguaggio sorgente accettato dall assemblatore Microsoft MASM nelle versioni successive alla
Esercizi per il recupero del debito formativo:
ANNO SCOLASTICO 2005/2006 CLASSE 4 ISC Esercizi per il recupero del debito formativo: Facendo esclusivamente uso delle istruzioni del linguaggio macchina mnemonico del microprocessore INTEL 8086 viste
Architettura degli Elaboratori
Architettura degli Elaboratori Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo I processori Intel
Introduzione al linguaggio assembly MC68000
Corso di Calcolatori Elettronici I Introduzione al linguaggio assembly MC68000 Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle Tecnologie
Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086)
PROF. CARMELO CALARCO Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086) 1 IL LINGUAGGIO ASSEMBLY Il linguaggio assembly è un linguaggio di programmazione a basso livello. Per linguaggi di basso livello
1.1.1 Esercizio conta le occorrenze di un carattere in una stringa
1.1.1 Esercizio conta le occorrenze di un carattere in una stringa Scrivere un programma che legge una stringa di memoria lunga un numero arbitrario di caratteri (ma terminata da \0), inserita in un buffer
L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi
L Assembler 80x86 Concetti Generali M. Rebaudengo M. Sonza Reorda P. Bernardi Sommario Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni Sommario Introduzione Pseudo-Istruzioni
Assembler 8086/8088: Concetti Generali
L Assembler 8086 Concetti Generali M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Sommario Introduzione Pseudo-Istruzioni Operatori
Nel microprocessore 8086 abbiamo una gran quantità di registri
I registri del microprocessore 8086 Nel microprocessore 8086 abbiamo una gran quantità di registri AH AL AX 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 B H B L BX 1 0 1 0 1 0 0 1 1 1 0 1 1 0 1 0 C H C L CX 1 0 1 1
Il linguaggio assembly 8086
Il linguaggio assembly 8086 Introduzione Il linguaggio macchina Il linguaggio naturale di un microprocessore è il linguaggio macchina. Nel linguaggio macchina non esistono riferimenti astratti o simbolici
Architettura degli elaboratori (A)
Laurea in Informatica a.a. 2010-2011 Laboratorio del corso di Architettura degli elaboratori (A) Modulo 1: l Architettura dell 8086 Valeria Carofiglio Linguaggi a vari livelli e loro relazioni Programma
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
Processore Danilo Dessì. Architettura degli Elaboratori.
Processore 888 Architettura degli Elaboratori Danilo Dessì [email protected] 888 L 888 è un processore che è stato progettato dalla Intel nel periodo 1978/1979 La sua architettura è simile a quella
Assembler Intel 80x86: Set delle istruzioni
Assembler Intel 80x86: Set delle istruzioni Calcolatori Elettronici B aa 2004/2005 Massimiliano Giacomin 1 Classi di istruzioni Il set di istruzioni dell Assembler Intel 80x86 può essere suddiviso nelle
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
Calcolatori Elettronici Parte VIII: linguaggi assemblativi
Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività
Linguaggio assembly per microprocessore 8086
Linguaggio assembly per microprocessore 8086 Imparare il linguaggio assembly significa conoscere il microprocessore I programmi assembly risultano molto più veloci di quelli scritti in qualsiasi altro
CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO
CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO 1 Domanda [1 punto] Dato il formato in virgola mobile su 32 bit così definito (precisione singola): o 1
Il linguaggio Assembly
Il linguaggio Assembly del µ8086 Prof. Ing. Mario Catalano 1 Linguaggi di Programmazione I linguaggi sono classificati in: Low level Linguaggio macchina & Linguaggio Assembly High level C/C++, Pascal,
Linguaggi, compilatori e interpreti
Linguaggi, compilatori e interpreti 1 Il codice macchina Ciascun calcolatore ha un ampio insieme di istruzioni che è in grado di eseguire. Le istruzioni vengono rappresentate mediante sequenze di bit 001000100011
Parte VII. Traduzione e Collegamento
Parte VII Traduzione e Collegamento VII.1 Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività Maggiore produttività Migliore leggibilità Facilità di documentazione Minore controllo
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
I programmi Assembler e Linker
Testo di riferimento: [Congiu] 10.1-10.5 (pg. 267 291) 11.a I programmi Assembler e Linker Produzione del software Istruzioni, direttive, simboli, ecc. Processo di produzione del software Analisi del problema
Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086.
I processori Intel Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. L'8086 e' un processore a 16 bit quindi i suoi registri potranno
MASSIMO UBERTINI ASSEMBLER WWW.UBERTINI.IT
MASSIMO UBERTINI ASSEMBLER WWW.UBERTINI.IT ;Nome del programma: inser.asm ;Programmatore: ;Descrizione ;Programma che inserisce un valore nel registro AX. DOSSEG.MODEL SMALL.STACK 200H.DATA.CODE BEGIN:
Il linguaggio Assembly della CPU 8086. Il linguaggio Macchina
Il linguaggio Assembly della CPU 8086 Il linguaggio Macchina Fortemente orientato alla macchina Direttamente eseguibile Praticamente illeggibile Utilizzato negli anni 50 70 per sviluppare programmi Attualmente
