Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di computer » Microprocessore e programmazione a basso livello

Microprocessore e programmazione a basso livello




Visite: 1116Gradito:apreciate stela [ Medio appunti ]
Leggi anche appunti:

Codice sorgente


CODICE SORGENTE   list                  p=16f684                               

Architettura 68000d


Architettura 68000d Il 68000 possiede i tipi binari Byte, Word, Longword

Il dispositivo Bus/Memoria


Il dispositivo Bus/Memoria I campi relativi alla configurazione di un bus sono
immagine di categoria

Scarica gratis Microprocessore e programmazione a basso livello

MICROPROCESSORE E PROGRAMMAZIONE A BASSO LIVELLO


1. Le porte logiche

1 ingresso


2 ingressi

A

NOT

A

B


AND

OR

EXOR


NAND

NOR

EXNOR







































2. L'indirizzamento segmentato

Data una coppia Segmento:Offset ad essa corrisponde un solo indirizzo segmentato: il viceversa non è però vero. Ad esempio, l'indirizzo segmentato appena ricavato, 7 2200, oltre che da 6800:A200 poteva provenire dalle coppie

Segmento

6 A






Offset

8 2 0 0

A 0 0 0

E 1 0 0

0 0 0 0

F F F 0

2 2 0 0

Indirizzo segmentato





(max seg)


(min seg)


canonico


3. Interrupt BIOS - ROM


INT 16 - 10 H    Video

AH

Servizio

Registri coinvolti


Determina la modalità del video

Tipo       AL

I seguenti valori usano 16 colori:

1 : 40 x 25, Testo

3 : 80 x 25, Testo

13 : 320 x 200, Grafico

14 : 640 x 200, Grafico


Fissa la posizione del cursore

Riga       DH

Colonna DL


Legge la posizione del cursore

DH Riga

DL Colonna


Legge il carattere nella posizione del cursore

AH Colore

AL Codice ASCII


Scrive caratteri nella posizione del cursore senza modificarla, con un colore stabilito

Codice ASCII AL

Colore BL

Numero di ripetizioni CX

I 16 colori sono numerati da 0 a 15. BL stabilisce entrambi, con la convenzione

fondo x 16 + scritta BL

0 A

Scrive caratteri nella posizione del cursore senza modificarla

Codice ASCII AL

Numero di ripetizioni CX

0 C

Scrive un pixel sullo schermo in modalità grafica

Colore del pixel AL

Riga del pixel DL

Colonna del pixel CX

0 D

Legge il colore di un pixel determinato sullo schermo in modalità grafica

AL Colore del pixel

Riga del pixel DL

Colonna del pixel CX

0 E

Scrive caratteri dalla posizione del cursore modificandola

Codice ASCII AL


TTY = teletype: reagisce a 3 caratteri di controllo

0 8 : back-space

0 A : line feed

0 D : Carriage return

0 F

Rileva la modalità del video

AL tipo

(cft servizio 0 0 per i numeri )


INT 20 - 14 H    Comunicazione seriale con la porta RS232

AH

Servizio

Registri coinvolti


Inizializza la porta

Parametri AL

Bit di AL


Baud

000 : 110 bit/s

001 : 150 bit/s

010 : 300 bit/s

011 : 600 bit/s

100 : 1200 bit/s

101 : 2400 bit/s

110 : 4800 bit/s

111 : 9600 bit/s


Parità

0 0 : Nessuna

0 1 : Dispari

1 0 : Nessuna

1 1 : pari


Bit di stop

0 : uno

1 : due


Codifica

0 0 : non usato

0 1 : non usato


7 bit, solo

ASCII standard


8 bit,

ASCII esteso


Trasmette un byte alla porta

byte AL


Riceve un byte dalla porta

AL byte


INT 22 - 16 H    Tastiera

AH

Servizio

Registri coinvolti


Acquisisce il valore di un tasto

Codice ASCII       AL

Scan code             AH


Lo scan code (codice di scansione) è il numero che appartiene ad ogni tasto della tastiera:

Il valore del codice ASCII può modificarsi a seconda dei valori dei byte di stato della tastiera. Così, ad esempio, se si preme il tasto (! / 1), il suo scan code, in AH è sempre 02, ma con shift premuto in AL va 2 1 ( cod ASCII 33, corrispondente al punto esclamativo), altrimenti in AL va 3 1 ( cod. ASCII 49, corrispondente alla cifra uno).

Se in AL c'è 00, significa che è stato premuto un tasto speciale (freccette, tasti funzione, ecc) o una combinazione di tasti ( CTRL + tasto, ALT + tasto ecc.). In tal caso resta solo lo scan code per individuare il tasto premuto, o la combinazione di tasti)

Le informazioni sullo stato della tastiera sono contenute nei due byte 0000 : 0417 e 0000 : 0418

bit




= 1 INS attivo

= 1 INS premuto


= 1 Caps Lock attivo

= 1 Caps Lock premuto


= 1 Num Lock attivo

= 1 Num Lock premuto


= 1 Scroll Lock attivo

= 1 Scroll Lock premuto








= 1 Shift sinistro premuto



= 1 Shift destro premuto



INT 40 - 28 H    Comunicazione con la scheda di rete (fittizio)

AH

Servizio

Registri coinvolti


Trasmette un byte alla porta

byte AL


Riceve un byte dalla porta

AL byte


4. Sintesi di elementi di linguaggio Turbo BASIC

Il byte in esadecimale sono

i bit che effettivamente sono in memoria, trascritti in esadecimale per comodità di lettura.


Il valore numerico naturale è

il numero associato al BYTE, se interpretato come numero in base 2 ( o base 16 )


Il carattere ASCII e'

il carattere associato al BYTE nel codice ASCII



Nel codice ASCII i byte con valore numerico da 0 a 31 e 127 sono caratteri di controllo, da 32 a 126 sono i caratteri standard, che rappresentano tutte le lettere, le cifre, i segni di interpunzione, da 128 a 255 i caratteri espansi, che servono per le lettere straniere o accentate, simboli matematici, riquadri per l'interfaccia grafico (fincature).

B Y T E

Num

C.

B Y T E

Num

C.

B Y T E

Num

C.

Binario

Esa

Binario

Es.

Byte bin.

Es.



8

BS



48




64



0 A

10

LF



49




65

A


0 D

13

CR



50




66

B


1 B

27

ESC



51




89

Y



32




52



5 A

90

Z



34




53




97

a



38

&



54




98

a


2 A

42




55





y


2 B

43




56



7 A


z


2 D

45




57



7 C




2 F

47



3 F

63



7 E




Non è necessaria la preventiva dichiarazione dei campi, ma il tipo di dato si desume dal suffisso:

alfa% = intero a 2 byte    beta& = intero a 4 byte ga$ = stringa o carattere ( se di lunghezza 1)

nu! o semplicemente nu = floating point a 4 byte   big# = floating point a 4 byte


Le funzioni di conversione predefinite sotto indicate permettono di determinare

Dato il valore numerico num% :

c$ = CHR$(num%)

il carattere corrispondente nella codifica ASCII ( in c$ )

s$ = STR$(num%)

il valore numerico ( anche di altri tipi di dato) , come stringa

Dato il carattere c$ :

num% = ASC ( c$ )

il valore numerico naturale, codice ASCII del carattere (in num% )

Data la stringa s$

num% = val( s$)

il valore numerico della stringa ( anche in altri tipi di dato)

a$ = MID$ ( s$, inizio%, lunghezza%)

la sottostringa che parte dal carattere inizio% ed è lunga lunghezza%.

c$ = MID$ ( s$, i%, 1)

il carattere di posto i% nella stringa

Scrivendo

MID$ (stri$, 3, 1 ) = 'A'

il carattere A viene immesso nella terza posizione della stringa

5. Istruzioni a basso livello del Turbo Basic


segmento


VARSEG (

nomedicampo


offset


VARPTR (

nomedicampo


Restituiscono il segmento di memoria e l'offset che individuano l'indirizzo di una variabile in memoria. Entrambi sono valori compresi tra 0 e 65 535. Conviene utilizzare come tipo di dato destinato a contenere sia segmento che offset interi lunghi. Per la loro visualizzazione, piuttosto che usare la forma decimale, può essere preferibile convertirli in esadecimale con HEX$().

DEF SEG


segmento

Imposta l'indirizzo del segmento di memoria da cui successivamente calcolare lo scostamento relativo (offset, o displacement). Se non specificato, per default viene considerato il segmento dove il TB memorizza le variabili. <segmento> può essere un intero tra 0 e 65535, e generalmente viene fornito come costante esadecimale, preceduto da &H.

byte


PEEK(

offset


Restituisce il valore numerico, compreso tra 0 e 255, del contenuto del byte all'indirizzo indicato in <offset>, calcolato come spiazzamento relativo rispetto al segmento definito da DEF SEG.

Generalmente é conveniente visualizzare tale valore in forma esadecimale, usando HEX$()

POKE

offset


byte

Memorizza all'indirizzo indicato da < offset >, un valore intero compreso tra 0 e 65535, il contenuto specificato da <byte>, un valore intero compreso tra 0 e 255. Entrambi i valori, se costanti, conviene scriverli in forma esadecimale, preceduti da &H.

Per operare sui registri si usa REG, nella doppia forma di istruzione e funzione. I registri vengono indicati da numeri, secondo la seguente tabella di corrispondenza

Corrispondenza registri REG ( n )


Registri

AX

BX

CX

DX

CS

DS

SS

ES

IP

SP

BP

SI

DT

Flag

T.B.
















REG

numero


valore

Assegna al registro indicato dal numero un valore numerico, espresso da una costante, decimale o esadecimale (preceduta da &H ), o contenuto d un campo, o risultato di una espressione con valori costanti o variabili.

Il valore in ogni caso non deve superare 65 535.

Non è possibile trasferire valori numerici nei mezzi registri. Se necessario, occorre comunque coinvolgere tutto il Registro, come mostrato nell'esempio, relativo a AX.

REG 1, &H0E41 : REG 1, 3649 : REG 1, 14 * 256 + 65 : REG 1, &H0E * 256 + &H41

equivalenti all'assembler

MOV AH , 0E

MOV AL , 41

Possono essere naturalmente usate anche variabili intere.

REG 1, a%*256 + b%

Memorizza in AH il valore numerico di a%, e in AL il valore numerico di b%, che ovviamente entrambi dovranno essere compresi tra 0 e 255

nomedicampo


REG (

numero


Trasferisce il valore del Registro indicato dal numero in un campo. In ogni caso il valore è determinato come se fosse un intero a due byte, indipendentemente dal tipo di variabile usata.

Ciò significa, in particolare, che la sequenza delle due istruzioni

REG 1, 65535

a& = REG ( 1 )

trasferisce in a& il valore -1, corrispondente al contenuto del registro FF FF interpretato come variabile intera. Volendo il valore positivo da 0 a 65 535 privo del segno occorre utilizzare una variabile intera a 4 byte e, in caso di numero negativo, aggiungere 65536, con l'analisi successiva

if a& < 0 then a& = a& + 65536

Per individuare i valori dei due mezzi registri AH e AL si può scrivere, solo con variabili intere a due byte:

AH% = REG(1) 256       ' Divisione intera per 256, quindi il valore dei primi 8 bit

AL% = REG(1) mod 256 ' Resto della divisione intera per 256, quindi il valore dei secondi 8 bit

Volendo usare variabili intere a 4 byte, si dovrà invece scrivere

AH& = int ( reg(1) / 256) : AL& = reg(1) - AL& * 256

CALL INTERRUPT

numero

Richiama l'interrupt specificato dal numero, espresso il decimale o esadecimale.


Scarica gratis Microprocessore e programmazione a basso livello
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...