Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DIM EQU 8
- .MODEL small
- .STACK
- .DATA
- VET1 DB 00101101B, 01000010B, 01001011B, 10000001B, 01100001B, 11000000B, 11111111B, 00001011B
- VET2 DW DIM DUP(?)
- .CODE
- .STARTUP
- CALL EXTRACT
- .EXIT
- EXTRACT PROC
- MOV BL, 3 ; Numero di nibble in ogni gruppo da 12 bit (esclusi i più alti)
- MOV AX, DIM ; Numero di byte in VET1
- SHL AX, 1 ; Numero di nibble in VET1
- DIV BL ; In AL ho il numero di sequenze da comporre
- PUSH AX ; Salvo quest'informazione nello stack (mi servirà come ritorno)
- MOV SI, 0
- MOV DI, 0
- SEQUENZA: TEST AL, 00000001B ; Sono in un passaggio pari o dispari?
- JPE PARI ; Bit a 1 pari -> numero pari
- DISPARI: MOV BX, 0 ; Azzero il registro che mi contiene la singola sequenza
- ADD BL, VET1[SI] ; Prendo il primo byte (0000 0000) 0010 1101
- SHL BX, 4 ; 0000 0000 0010 1101 --> 0000 0010 1101 0000
- INC SI ; Passo al byte successivo
- MOV DH, VET1[SI]
- SHR DH, 4 ; DH = 0000 0100
- ADD BL, DH ; 0000 0010 1101 0000 --> 0000 0010 1101 0100
- MOV VET2[DI], BX ; Copio la sequenza nel vettore
- JMP PROSSIMO
- PARI: MOV BX, 0
- MOV DH, VET1[SI] ; Non mi sono spostato, sono sul byte puntato da SI
- AND DH, 00001111B ; Prendo solo la parte bassa
- ADD BL, DH ; Salvo i primi quattro bit 0010
- SHL BX, 8 ; 0000 0000 0000 0010 --> 0000 0010 0000 0000
- INC SI ; Passo alla successiva entry di dati
- ADD BL, VET1[SI] ; 0000 0010 0000 0000 --> 0000 0010 0100 1011
- MOV VET2[DI], BX ; Copio la sequenza nel vettore
- PROSSIMO: ADD DI, 2 ; Punto alla prossima sequenza da inserire in risultati
- DEC AL ; Decremento il numero di passi
- CMP AL, 0
- JNZ SEQUENZA
- POP AX ; Ripristino in AX il numero di elementi che ho generato
- MOV AH, 0 ; Forse c'era un resto in AH (non mi è mai servito!)
- MOV DI, AX ; Rispondo alle specifiche richieste
- RET
- EXTRACT ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment