Assembler - mini guida

Materie:Appunti
Categoria:Sistemi

Voto:

2.5 (2)
Download:266
Data:17.09.2007
Numero di pagine:4
Formato di file:.doc (Microsoft Word)
Download   Anteprima
assembler-mini-guida_1.zip (Dimensione: 15.4 Kb)
trucheck.it_assembler--mini-guida.doc     116.5 Kb
readme.txt     59 Bytes


Testo

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
15
8
7

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 5 ;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 xy 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
8
BIT

16
BIT
MUL
BL

MUL
BX

AX =
AL*BL

DX:AX =
AX*BX


DIVISIONE
DIV
8
BIT

16
BIT
DIV
BL

DIV
BX

AL / BL

DX :AX /
BX
IN
AL
RISULTATO

IN
AX
RISULTATO
IN
AH
RESTO

IN
DX
RESTO
SERIALE:
1) Entrambe le macchine devono venire sincronizzate quindi devono avere gli stessi parametri;

Baud rate bps ( bite per secondo)
110
Bps
000
150
Bps

001
300
Bps
010
600
Bps

011
1200
Bps


2400
bps


4800
Bps
….
9600
bps

111
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:
1 0 bit
2 1 bit
Lunghezza parola:
7 bit 10
8 bit 11
lunghezza
9600 , n , 8 , 1 bit di stop
Baud rate parità
1
1
1

1
1
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 RIGA – COLONNA
Mov ah,02
Mov bh,0
Mov dh riga (y)
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

Esempio