Programmazione in assembler

Materie:Appunti
Categoria:Sistemi

Voto:

2 (2)
Download:109
Data:08.06.2007
Numero di pagine:4
Formato di file:.doc (Microsoft Word)
Download   Anteprima
programmazione-assembler_2.zip (Dimensione: 12.92 Kb)
trucheck.it_programmazione-in-assembler.doc     109 Kb
readme.txt     59 Bytes


Testo

C++: dimensione grossa del programma, comando da eseguire limitata la velocità.
ASSEMBLER: se 14 se 21 è lungo il programma da eseguire.
PROGRAMMAZIONE DIRETTA: significa che andiamo a scrivere direttamente sul registro.
La dove la RAM è un vincolo si cerca di usare la programmazione diretta.
La dove non ci sono vincoli fisici si usa la programmazione immediata.
INT 14H indica:
- quanto veloce deve essere il programma;
- quanta dimensione fisica occorre.
Il C++ ha istruzioni equivalenti all’assembler e si possono integrare della procedura in codice per assembler. Il vantaggio del C contrariamente all’assembler è molto più comodo con istruzioni semplici.
PROGRAMMAZIONE SOFTWARE DI BASE:
In assembler abbiamo due cose:
- int 14h che usa il bios;
- int 21 h che usa il dos.
Le stesse cose si possono fare in C usando le funzioni bioscom.
PROGRAMMAZIONE DIRETTA:
In assembler le istruzioni da usare sono:
- IN (IN AL,DX)
- OUT (OUT DX,AL)
DX si usa perché le porte seriali hanno indirizzi a re cifre decimali. Le stesse operazioni si fanno in C con le istruzioni INPORT e OUTPORT delle quali esiste anche la variante INPORTB e OUTPORTB da usare se i dati da trasferire sono in byte. La scelta fra C e Assembler dipende da quanta memoria ho per il programma. Per applicazioni che devono girare su apparecchiature quindi che stanno su EPROM o ROM conviene usare assembler. La dove invece è richiesta tutta la velocità di comunicazione prevista dell’integrato si usa la programmazione diretta. Nell’uso o nell’altro così possibile gestire la seriale in polling o interrupt come si vedrà più avanti. La scelta tra le due alternative dipende dalle esigenze di velocità del programma.
L’oggetto che genera segnali di clock a frequenze definite selezionabili con un comando software si chiamano “timer”. Tutti gli integrati che si realizzano i dati sono collegati a un timer. Ogni integrato seriale ha bisogno di un timer che può essere interno o esterno.
I PROBLEMI SONO:
1) Gli ingressi sono presettabili tramite LOAD.
Il comando Load fa in modo di far partire LOAD
il conteggio al numero che si vuole. CK
I contatori sono UP e DOWN e possono
andare a incrementare o a decrementare.
BUS DEI DATI
CK
RES
1Hz
=
RES: è un pin per aspettare i dati si sceglie il valore da dare in base alla frequenza.
1MHz =
CK =
CK =
CK =
ZC(zero clock) a decrescere fino a zero.
TO(time out) va da zero fin quando ha rilevato i numero.
Gli strumenti sopra disegnati si chiamano canali.
8253
8254 INTEL si differenziano per il numero di bit.
Le seriali che sono in commercio sono:
16550: il timer è interno e oltre ad avere la circuiteria per serializzare a anche il timer.
Il valore che si manda o che si usa si chiama costante di tempo. Si trova nel manuale e c’è una tabella dove sono i valori dal costruttore.
BUS DEI DATI
INTEGRATO SERIALE

SHIFT REGISTER: è un registro a scorrimento che è abbinato al buffer.
ARCHITETTURA INTERNA DI 8250-16550
8250
Ha una serie di registri interni e ha 11 registri ognuno dei quali ha una specifica funzione e ogni bit ha una sua specifica funzione. I registri per questo integrato sono: 3F8H e successivi per la COM1, 2F8H e successivi per la COM2. Gli interuppt sul computer sono 15. Sul computer ci possono essere 4 seriali COM 1,2,3,4. COM 1 e 3 sono uguali e COM 2 e 4 sono uguali. Si può usare la 1 o la 3 o ,la 2 o la 4 non contemporaneamente. Gli indirizzi per la 3e la 4 sono : 3E8H è la COM3, 2E8H per la COM4. Sono tre cifre decimali, quando si usano istruzioni IN e OUT bisognerà usare il registro DX. 3F8 e 3E8 è il registro del dato è il registro dal quale il dato ricevuto o al quale si manda il datola trasmettere.
MOV DX,3F8H
MOV AL,DX
Sono i registri di transito dei dati.
3F8 si chiama “IER”: sta a INTERUPT ENABLE REGISTER. E’ il registro che dice all’integrato in quale circostanza deve generare l’interupt da mandare alla CPU. Un interupt è per la trasmissione e uno per la ricezione. Un interupt sull’errore. Mi ha mandato un interupt il modem che vanno a gestire con accortezza. Il più difficile da gestire è l’interupt di trasmissione e la CPU lo manda quando vede un buffer vuoto. La seriale continua a mandare segnali per dire che può trasmettere. Se non trasmette bisogna disabilitare l’interupt di trasmissione.
0 8
1 9
INT
2 10
3
11
4
12
5 13

6 14

7 15
VETT=LINEA+8 * 4;
TCS
La locazione dipende dal fatto che i programmi sono rilocabili cioè quanto si scrive un programma e lo si linka si danno indirizzi relativi quando si scrive.
PROGRAMMA
SEG
IND REG ASS
1 COD CS+1
2 CS CS+2
3 CS+3
. .
. .
. .
. .
. .
. .
10 CS+10

Quando si esegue gli si danno degli indirizzi assoluti.
Interrup seriale: si può modificare e si può andare a modificare nella tabella.
1CH
Es:
INT 4: COM1 = 4+8*4=48=30H
Vett*4 vett equ 4
CLI
PUSH DS
MOV AX,0
MOV DS,AX
MOV BX,VETT*4
MOV [BX],OFFSET RISP (va all’IP)
MOV [BX+2],SEG RISP (va al CS)
POP DS
STI
CLI:disabilita l’interrup;
STI:abilita l’interrup;
Le istruzioni scritte sopra valgono per qualsiasi INT da modificare.
Quando si usa lo STACK:
- c’e una procedura;
- c’è un int;
- c’è push e pop
8086
Si da la direttiva di usare l’istruzione da 8086. Quando si da quest’istruzione il processore lo suddivide in segmenti se no lo dividerebbe in pagine.
La memoria del 8086 in avanti viene gestita a pagina e non a segmenti(1 pagina = 256 byte).
Gestione a pagina consente di avere solo le cose che servono nel programma ed è molto più elastica.

Esempio