Multiplicacion y division 16f84

#1
Hola a todos:
Aquí estoy con un nuevo problema aritmético:
Ahora necesito realizar la multiplicación y división de 2 numeros de 4 bits y visualizarlos en un display(o dos), lo tenia pensado realizar con el método de sumas sucesivas para la multiplicación y de restas sucesivas para la división pero no me lo permitieron, necesito realizarlo ÚNICAMENTE por el método de desplazamiento de bits. Alguien me podría ayudar, porque no tengo idea de como hacerlo.
 
#2
Mas o menos así es como funciona la cosa: al desplazar un número a la izquierda este número se multiplica por 2, desplazarlo 2 veces a la izquierda equivale a multiplicarlo por 4, hacerlo 3 veces es multiplicarlo por 8 y así sucesivamente, en cambio desplazar un número a la derecha equivale a dividirlo entre 2, si se desplaza 2 veces es como si se dividiera entre 4 y así es como funciona el método.

El inconveniente de utilizar desplazamientos es que solo puedes multiplicar o dividir por múltiplos de 2
 
#5
hola amigos del foro, la verdad yo soy muy nuevo en estas cosas de pic, pero tengo un profesor q le gusta q uno se adelante a las cosas y me parece bien. lo q pasa es q nos mando a hacer dos programas, uno q multiplicara, y otro q dividiera dos numeros de 8 bits q entran al pic, pero la verda todavia tengo muchas dudas sobre los programas. espero q po favor me den una indicacion de como lo puedo hacer, no tienen q decirmelo, con q me denuna guia yo lo puedo hacer ya q son retos pequeños pero q ayudan a uno aprender cosas nuevas cada dia.

muchas gracias por su colaboracio.
 
#6
Hola. Estuve haciendo la multiplicación de 16 x 8, y pues si alguien la pudiera revisar.
Gracias.

PHP:
MULTP16_8
;AQUI VA LA MULTIPLICACION DE 16 X 8
;    vienen de la conversion:
;    MULTH----SE DEFINIO EN EL PROGRAMA PRINCIPAL        
;    MULTL-----SE DEFINE EN PROGRAMA PRINCIPAL    
;    viene del programa principal
;        M1        
;sus salidas son:
;        RMH
;        RML
    CLRF        RMM
    CLRF        RMH
    CLRF        RML
    MOVF        MULTH,W
    SUBWF    MULTL,W
    BTFSS        STATUS,Z
    GOTO        DIFERENTES_DE_CERO
    RETURN
DIFERENTES_DE_CERO
    MOVF        M1,F
    BTFSS        STATUS,Z
    GOTO         CERO_NO
    RETURN
CERO_NO
    MOVF        MULTH,F
    BTFSS        STATUS,Z
    GOTO        MULTIPLICA_16_8
    MOVF        MULTH,W
    MOVWF    M1
    MOVF        MULTL,W
    MOVWF    M2
    CALL        MULTIP
    RETURN
MULTIPLICA_16_8
    MOVF        M1,W
    MOVWF    M2
    MOVF        MULTL,F
    BTFSS        STATUS,Z
    GOTO        MULTL_ES_CERO
    INCREMENTAR_RMH
    MOVF        MULTH,W
    SUBWF    RMH,F
     BTFSS    STATUS,C
    GOTO        SOLO_M1
    INCF        RMM,F
     SOLO_M1
    DECFSZ    M1,F
    GOTO        INCREMENTAR_RMH
    RETURN

MULTL_ES_CERO
    MOVF        MULTL,W
    SUBWF    RML,F
    BTFSS        STATUS,C
    GOTO        SOLO_M1_2
    INCF        RMH,F
SOLO_M1_2
    DECFSZ    M2,F
    GOTO        MULTL_ES_CERO
    GOTO        INCREMENTAR_RMH
    RETURN
 
Última edición por un moderador: