Messaggioda CrisLoveStefy » 29/06/2006, 12:50

Vi ringrazio molto per i link così me li stampo tutti in facoltà e li rilego gratuitamente :-)!
Chi trova un amico trova il tesoro!
CrisLoveStefy
New Member
New Member
 
Messaggio: 13 di 70
Iscritto il: 22/06/2006, 17:45

Messaggioda lorven » 29/06/2006, 17:16

Ho ripensato alle sciocchezze che ho scritto nel post precedente,
ho scaricato un buon assembler/linker/debugger (TASM)
e ne è venuto fuori il seg. programma Assembly
(non riesco ancora a includerlo in un prg DevC++)

Codice:
.MODEL small
.STACK 160h      ; Lunghezza stack

.DATA            ; Segmento dati
   Lbyte EQU 8   ; N. bit del carattere

   Len   DW 05   ; Lunghezza stringa Vet
   N     DW 20   ; Numero di bit su cui calcolare il bit di parità (lung. pacchetto)
   Error DB 0    ; 1=Errore di parità nella stringa; 0=ok
   
   Vet   DB 165  ; 5 chars da controllare (40 bit, 2 pacchetti)
         DB 7DH   
         DB 6CH
         DB 40H
         DB 91H  ; 1010 0101 0111 1101 0110 1100 0100 0000 1001 0001
   
.CODE               ; Segmento codice
Begin:

start:   nop        ; start segmento codice
   MOV   AX,@DATA   ; set up registro segmento dati
   MOV   DS,AX      ;
   MOV   ES,AX      ; set up ES
;---------------------------------------------------------------------------------------------------------------------------   
   MOV   AH,00H     ; Pulizia video
   MOV   AL,03H
   INT   10H
;---------------------------------------------------------------------------------------------------------------------------   
   XOR   SI,SI      ; Azzera indice vettore SI
   MOV   CX,Len     ; Lunghezza del vettore in CX
   XOR   BX,BX      ; Azzera BX=contatore dei bit =1
   XOR   AX,AX      ; AX=contatore bit esaminati nella stringa
   XOR   DH,DH      ; e DH=contatore bit esaminati nel byte attuale
;---------------------------------------------------------------------------------------------------------------------------   
Ciclo:
   MOV   DL,Vet[SI]   ; Carica in DL un carattere dal vettore
L1:
   CMP   DH,Lbyte     ; Se abbiamo elaborato un intero byte
   JGE   L3           ; passa al successivo
   CMP   AX,N         ; Confronta contatore bit esaminati con N
   JGE   L2           ; Se AX >= N, N bit del frame già esaminati, salta a L2
   INC   AX           ; altrimenti incrementa contatore bit esaminati in Vet
   INC   DH           ; e contatore bit esaminati nel byte attuale
   SHL   DL,1         ; Assegna a CF il 1. bit a sinistra
   JNC   BitZero      ; Se CF=0 va a BitZero per non incrementare BX
   INC   BX           ; altrimenti incrementa il contatore dei bit =1
BitZero:
   JMP   L1           ; e va ad esaminare un altro bit
L2:   
   TEST   BX,1        ; Verifica se contatore bit 1 è dispari
   JNZ   ErroreParità ; Se dispari, c'è un errore di parità
   XOR   AX,AX        ; altrimenti riazzera contatore bit esaminati
   JMP   L1           ; e continua ad elaborare i restanti bit
L3:
   INC   SI           ; Incrementa l'indice del vettore
   XOR   DH,DH        ; Azzera contatore bit esaminati nel byte attuale
   CMP   AX,N         ; Confronta contatore bit esaminati con N
   JL   L4            ; AX < N, ci sono ancora bit da esaminare nel pacchetto, salta a L4
   XOR   AX,AX        ; altrimenti riazzera contatore bit esaminati
   TEST   BX,1        ; Verifica se contatore bit 1 è dispari
   JNZ   ErroreParità ; Se dispari, c'è un errore di parità
L4:
   LOOP   Ciclo       ; Continua a meno che CX non sia 0
;---------------------------------------------------------------------------------------------------------------------------   
   MOV   Error,30h    ; Non ci sono errori di parità
   JMP   Fine         ; Salta alla stampa
ErroreParità:
   MOV   Error,31h    ; Trovato un errore di parità
;----------------------------------------------------------------------------------
Fine:   MOV   BH,00H  ; Stampa risultato su pagina video 0
   MOV   AL,Error     ; Byte da stampare in AL
   MOV   AH,0EH       ; in modo TTY
   INT   10H          ; Interrupt Bios
;---------------------------------------------------------------------------------------------------------------------------   
   MOV   AH,4CH       ; Funzione per uscire al dos
   INT   21H          ; Esce al dos

END Begin



Forse questo programma non interessa più, ma almeno questa volta funziona
(pare). :-)
Un giorno senza sorriso è un giorno perso.
Charlie Chaplin
Avatar utente
lorven
Junior Member
Junior Member
 
Messaggio: 165 di 369
Iscritto il: 06/12/2005, 20:55

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite