Questo topic e' stato chiuso dal moderatore.
15/07/08 8:14
Misciu87
Data una sequenza di bit, restituire la lunghezza media(arrotondata all'intero più vicino)delle sotto-sequenze di uno
Può andare bene cosi?
Solo che quali registri posso invertire in modo che funzioni lo stesso senza che però siano uguali?
Può andare bene cosi?
Solo che quali registri posso invertire in modo che funzioni lo stesso senza che però siano uguali?
#include <stdio.h> #include <stdlib.h> int main() { //input unsigned char vet[]= {0xBC,0xFF,0x01}; unsigned short int len = 18; //lunghezza (numero di bit) //Output unsigned char lung; __asm { XOR AL, AL XOR BL, BL XOR CL, CL XOR EDX, EDX XOR ESI, ESI MOV DX, len MOV EDI, EDX XOR EDX,EDX XOR DI,DI MOV DI,8 MOV AH, vet[ESI] partenza: CMP DX, len JE calcola CMP DX, DI JNE verifica ADD DI,8 INC ESI MOV AH, vet[ESI] verifica: MOV BH, AH AND BH, 00000001b CMP BH, 00000001b JE incremento MOV CL, 0 JMP cambia incremento: INC BL CMP CL, 0 JNE cambia INC AL MOV CL, 1 cambia: SHR AH, 1 INC DX JMP partenza operazione: CMP BL,0 JE fine XOR DX,DX XOR AH,AH MOV DL,AL MOV AL,BL DIV DL resto: CMP AH,0 JE modifica MOV CL,DL MOV CH,BL AND CL,00000001 AND CH,00000001 XOR BX,BX MOV BL,AL CMP BL,0 JE fine MOV BH,AH XOR AH,AH MOV AL,DL MOV DL,2 DIV DL CMP BH,AL JA pari JE dispari JMP fine dispari: CMP CL,0 JE zero AND CL,CH CMP CL,0 JE fine JMP diversi diversi: CMP AL,0 JE fine pari: INC BL JMP fine zero: AND CL,CH CMP CH,0 JE verificazero JMP diversi verificazero: CMP BH,AL JE pari fine: MOV lung, BL JMP ultimo modifica: MOV BL,AL JMP fine ultimo: } //Stampa a video printf("Lunghezza media delle sotto-sequenze di 1: %d", lung); system("PAUSE"); return 0; }
Ultima modifica effettuata da Misciu87 15/07/08 8:16
aaa