Posto il codice fatto questa mattina a scuola (in sistemi) che permette (anche se molto semplicemente) di far comunicare via seriale due pc.Supporta il tasto invio (che manda il cursore a capo su entrambi i pc) ed è possibile terminare su entrambi i pc il programma digitando semplicemente "-" (senza virgolette ).Il codice è ampliamente commentato tuttavia per ogni domanda non esitate !
[ot]wow...so 2 anni che non programmo in assembly ![/ot]
Codice:
;R4z0r_Cr4$H
DOSSEG
.MODEL SMALL
.DATA
btot db 00000000b
s_v db 10,13,'inserire la velocità(digitare 1 per 9600 o 2 per 4800):$'
s_l db 10,13,'inserire la lunghezza del carattere (digitare 1 per 8bit o 2 per 7bit):$'
s_e db 10,13,'Valore errato!',10,13,'$'
.CODE
inizio: mov AX, @DATA
mov DS, AX
fase1: mov ah, 9 ;stampa a
mov dx,offset s_v ;video la
int 21h ;stringa s_v
mov AH,01h ;attende che si
int 21h ;prema un tasto,il carattere viene messo in AL
cmp al,49 ;controlla se il carattere
jne p1 ;immesso è 1
or btot,11100000b ;concatena a btot 9600
jmp v2
p1:cmp al,50 ;controlla se il carattere
jne p2 ;immesso è 2
or btot,11000000b ;concatena a btot 4800
jmp v2
p2:mov ah, 9 ;stampa a
mov dx,offset s_e ;video la
int 21h ;stringa s_e
jmp fase1
v2:mov ah, 9 ;stampa a
mov dx,offset s_l ;video la
int 21h ;stringa s_l
mov AH,01h ;attende che si
int 21h ;prema un tasto,il carattere viene messo in AL
cmp al,49 ;controlla se il carattere
jne p11 ;immesso è 1
or btot,00000011b ;concatena a btot 8bit
jmp v3
p11:cmp al,50 ;controlla se il carattere
jne pe ;immesso è 2
or btot,00000010b ;concatena a btot 7bit
jmp v3
pe:mov ah, 9 ;stampa a
mov dx,offset s_e ;video la
int 21h ;stringa s_e
jmp v2
v3:mov ah,0 ;
mov al,btot ;inizializza
mov dx,0 ;la
int 14h ;porta
torn:
mov ah,3 ;
mov dx,0 ;inizia la ricezione
int 14h ;
and ah,00000001b ;controllo
cmp ah,0 ;di paritÃÂÂ
je contrt ;
mov ah,2 ;riceve
mov dx,0 ;il carattere
int 14h ;dalla seriale
mov ah,02h ;stampa
mov dl,al ; a
int 21h ; video
cmp al,45 ;se riceviamo il carattere ' - '
je fine ;termina il programma
contrt: mov ah,01h ;effettua il controllo
int 16h ;nel buffer di tastiera,settando a 0 lo ZF se è presente un carattere
jz torn ;avvia la procedura inviaC se il flag ZF è a 1 (carattere non presente)
inviaC:
mov ah,00h ;preleva il carattere
int 16h ;dal buffer di tastiera
mov ah,02h ;stampa a video
mov bl,al
mov dl,bl ;
int 21h ;il carattere appena letto,il carattere è in AL
mov al,bl ;
mov ah,01h ;Invia il carattere
mov dx,0 ;sulla porta seriale
int 14h ;
cmp bl,13 ;controlla se si preme ' invio '
jnz ex ;se è diverso da invio salta all'etichetta ex
mov dl,10 ;stampo a
mov ah,2 ;video
int 21h ;line feed (vai a capo)
mov ah,01h ;invia
mov dx,0 ;sulla porta
mov al,10 ;seriale il
int 14h ;line feed (vai a capo)
ex: cmp bl,45 ;se il carattere è ' - '
je fine ;termina il programma
jmp torn
fine: mov AH, 4Ch
int 21h
end inizio
[ot]wow...so 2 anni che non programmo in assembly ![/ot]