![]() | ![]() |
|
|
Benedetti Vallenari Mirco
INTRODUZIONE:
Per programmare il microprocessore, cioè per scrivere programmi e procedure eseguibili dal microprocessore, si usa un linguaggio simbolico chiamato LINGUAGGIO ASSEMBLY, fornito da istruzioni che rappresentano il funzionamento interno del processore e le sue operazioni elementari.
Si dice che l' assembly è un linguaggio orientato alla macchina,infatti per programmare in assembly occorre conoscere l' architettura del microprocessore e del sistema di calcolo.
Per tradurre un programma sorgente scritto in assembly 8088/8086, si usa un programma assemblatore che accetta i linguaggi assembly e li traduce automaticamente in codice oggetto, quindi assegna alle frasi scritte il rispettivo codice macchina.
I REGISTRI:
Se il microprocessore ha un parallelismo uguale a 16, possiamo avere 4 registri
a 16
bit, a loro volta ogni registro si divide in due registri a 8
bit:
I registri a 16 bit si chiamano : AX - BX - CX - DX
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AX |
AH |
|
AL |
|
||||||
|
|
|||||||||
BX |
BH |
|
BL |
|
||||||
|
|
|||||||||
CX |
CH |
|
CL |
|
||||||
|
|
|||||||||
DX |
DH |
|
DL |
|
||||||
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
H= hight L= low
Il registro AX oltre ad essere un registro accumulatore,(Registri accumulatori,sui quali sono state implementate le operazioni aritmetico - logiche),viene utilizzato nelle moltiplicazioni e divisioni, e anche attraverso le operazioni di input e output verso le periferiche.
Il registro BX viene utilizzato come indice di un vettore o come base di una tabella.
Il registro CX viene utilizzato come contatore per esempio nelle istruzioni loop
Il registro DX viene utilizzato in moltiplicazioni per contenere la parte più significativa di un prodotto o nelle divisioni per contenere il resto,nelle istruzioni IN e OUT e in molte chiamate al sistema operativo DOS.
STAMPARE A VIDEO UN CARATTERE:
mov dl,'A' ;Il carattere da stampare deve essere nel registro DL
mov ah,02
int 21h
LEGGERE UN CARATTERE DA TASTIERA:
mov ah,01
int 21h ;Il carattere letto si trova nel registro AL
ESERCIZIO:
somma tra 2 numeri e stampa a video il risultato;
mov al,3 ; assegno al registro 3
mov ah,5 ; assegno al registro 3
add al,ah ; sommo i due registri il risultato si trova in al
mov ah,02 ;stampo a video il risultato
mov dl,al
add dl,'0'
int 21h
VARIABILI:
Nome variabile tipo valore di inizializzazione
Es:
numero db ;la variabile numero contiene 5 ed è di tipo define bite
Tipo variabili;
DB : define
bite 0..255
DW : define
word 0..65535 = 64k
Valore di inizializzazione:
Se non vogliamo mettere nessun valore mettiamo ?
CONFRONTO:
cmp x,y ;confronto x con y
dopo questa istruzione ci può andare:
je x=y jge x≥y
jl x<y jz x = 0
jle x≤y jnz x ≠ 0
jg x>y jnz x ≠ 0
jmp Salto senza condizioni
Es:
mov al,n1
cmp al,n1 ;confronto al con n1
jne fine ; se non sono uguali salta a fine:
mov ah,02 ;se sono uguali stampa U
mov dl 'U'
int 21h
jmp end ;salta a end e finisce il programma
..
.
.
fine: ;etichetta fine:
mov dl,'D' ; se sono diversi salta qui e stampa D
mov ah,02
int 21h
end ;fine programma
VETTORI:
Array db 200 dup('A')
200 è la dimensione del vettore
Dup sta per duplica
Tra ( ) c'e il valore di inizializzazione
DICHIARAZIONE DI UNA STRINGA
Stringa db " asino ki legge $ "
STAMPARE UNA STRINGA A VIDEO:
mov ah,09
lea dx,stringa ;lea carica l' indirizzo della stringa
int 21h
MOLTIPLICAZIONE
mul
|
|
|
|
|
|
|
|
|
BIT |
|
|
BIT |
|
|
MUL |
BL |
|
MUL |
BX |
|
|
|
|
|
|
|
|
|
AX = |
AL*BL |
|
DX:AX = |
AX*BX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DIVISIONE
DIV
|
|
|
|
|
|
|
|
|
BIT |
|
|
BIT |
|
|
DIV |
BL |
|
DIV |
BX |
|
|
|
|
|
|
|
|
|
|
AL / BL |
|
DX :AX / |
BX |
|
IN |
AL |
RISULTATO |
|
IN |
AX |
RISULTATO |
IN |
AH |
RESTO |
|
IN |
DX |
RESTO |
SERIALE:
Entrambe le macchine devono venire sincronizzate quindi devono avere gli stessi parametri;
Baud rate bps ( bite per secondo)
|
Bps |
|
|
|
|
|
Bps |
|
|
|
|
|
Bps |
|
|
|
|
|
Bps |
|
|
|
|
|
Bps |
|
|
|
|
|
bps |
|
|
|
|
|
Bps |
|
|
|
|
|
bps |
|
|
|
|
Bit di parità:
pari 00
dispari 01
nessun bit 10 & 00
Servono in modo che chi riceve può capire se sono avvenuti degli errori.
Bit di stop:
0 bit
1 bit
Lunghezza parola:
7 bit 10
8 bit 11
lunghezza
n , 8 , 1 bit di
stop
Baud rate parità
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
baud rate |
bit di parità |
|
Lunghezza |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bit di stop |
|
|
|
|
|
|
|
|
|
|
|
|
PARAMETRI:
Mov ah,0
Mov al,0e3h
Mov dx porta(com.)
Int 14h
SPEDIRE UN CARATTERE
Mov ah,01
Mov dx,porta
Mov al,carattere
Int 14h
RICEVERE un carattere dalla seriale:
mov ah,02
mov dx,porta
int 21h
LEGGERE LO STATO DELLA SERIALE:
mov ah,03
mov dx,porta
int 14h
test ah,1
jz next
mov ah,02
mov dx,0
int 14h
mov dl,al
mov ah,02
int 21h
jmp next
CLRSER CANCELLA SCHERMO:
mov ah,06
mov al,0
mov bh,7
muv cx,0
mov dh,24
mov dl,79
int 10h
SPOSTA CURSORE
Mov ah,02
Mov bh,0
Mov dh
Mov dl colonna (x)
Int 10h
CONTROLLA LO STATO DELLA TASTIERA:
mov ah,01
int 16h
jz avanti ;se non c'è il carattere salta
SCHELETRO
STACK SEGMENT WORD STACK 'STACK'
STACK ENDS
DATA SEGMENT WORD PUBLIC 'DATA'
;VARIABILI
DATA ENDS
CODE SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODE,ES:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA;AX=DATA
MOV DS,AX;DS=X
;PROGRAMMA
MOV AX,4C00h
INT 21h
CODE ENDS
END START
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025