Aqui esta mi codigo:
En la direccion 123a:0008 me ha encontrado el numero 530f, lo que muestra en la pantalla:
El bit 03 esta activado
El bit 05 esta desactivado
El bit 09 esta activado
El bit 11 esta desactivado
Hay 07 bits activados
El numero de Bits Encendidos es de Paridad Impar, lo que significa que salta a FIN
Codigo fuente:
-Ocupa 512 bytes
org 100h
mov ax,123ah
mov bx,0008h
mov ds,ax
mov ax,[bx]
push cs
pop ds
call CheckBitsZ
call CountBitsE
call TCD
mov dx,CountB
mov ah,9
int 21h
mov ax,[CountN+1]
or ax,ax
jp NoFin
jmp FIN
;Codigo Para Paridad Par
NoFin:
mov ah,9
mov dx,PP
int 21h
ret
CheckBitsZ:
mov cl,3
mov word [Numb],"03"
call CheckBitZ
mov cl,5
mov word [Numb],"05"
call CheckBitZ
mov cl,9
mov word [Numb],"09"
call CheckBitZ
mov cl,11
mov word [Numb],"11"
call CheckBitZ
ret
CountBitsE:
mov cl,0
mov word [CountN],0
CountBitsEB:
call TestBit
jz CountBitsEZ
inc byte [CountN+1]
CountBitsEZ:
inc cl
cmp cl,16
jne CountBitsEB
ret
CheckBitZ:
push ax
call TestBit
jnz CheckBitZA
CheckBitZD:
mov ah,9
mov dx,BitZ
int 21h
mov ah,9
mov dx,BitD
int 21h
pop ax
ret
CheckBitZA:
mov ah,9
mov dx,BitZ
int 21h
mov ah,9
mov dx,BitA
int 21h
pop ax
ret
TestBit:
or cl,cl
jz TestBit0
push cx
mov bx,2
push ax
mov ax,1
TestBitB:
mul bx
dec cl
jnz TestBitB
mov bx,ax
pop ax
test ax,bx
pop cx
ret
TestBit0:
test ax,1
ret
TCD:
cmp byte [CountN+1],10
jb Return
sub byte [CountN+1],10
inc byte [CountN]
jmp TCD
Return:
add word [CountN],"00"
ret
FIN:
mov ah,9
mov dx,PI
int 21h
ret
times 100h-($-$$) db 0
BitZ db "El bit "
Numb db " $"
BitA db "esta activado",10,13,"$"
BitD db "esta desactivado",10,13,"$"
CountB db "Hay "
CountN db " "
CountT db "bits activados",10,13,"$"
PI db "El Numero de Bits Encendidos es de Paridad Impar, lo que significa que salta a FIN",10,13,"$"
PP db "El Numero de Bits es de Paridad Par, lo que significa que no salta a FIN",10,13,"$"
times 200h-($-$$) db 0