Gracias, ademas aparte trate por mi cuenta de realizar este programa y me salio esto; quiza sea algo diferente, y largo, pero me siento bien de haber hecho mi primer programa, cualquier "pulidita" sera bien atendida:
;*********************************************************
;* Programa aritmético de suma y resta *
;* Configuración: *
;* ->rb0-rb7 = entradas de los números num1 y num2 *
;* ->ra0-ra4 = salidas/entradas divididas en dos formas:*
;* +->ra0 se utiliza para determinar si es resta *
;* +->ra1 se utiliza para determinar si es suma *
;* +->pero también serán las salidas de los leds *
;* Realizado por: *
;* walter Rodriguez 20041078100 *
;* *
;*********************************************************
listp=16f84
;declaración de variables
num1 equ 0x0c
num2 equ 0x0d
aux equ 0x0e
resu equ 0x0f
org 0x00
goto inicio
org 0x05
inicio bsf 0x03,5 ;selección banco 1
movlw 0xff ;11111111->W
movwf 0x06 ;configura puerto B como entrada
;configuración del puerto A
confi movlw 0x1f ;11111->W
movwf 0x05 ;configura puerto A también como entrada temporal
bcf 0x03,5 ;selección banco 0
;carga de los números a sumar o restar
carga movf 0x06,0 ;puertoB->W
andlw 0x0f ;extraer primer numero
movwf num1 ;numero->num1
movf 0x06,0 ;puertoB->W
andlw 0xf0 ;extraer segundo numero
movwf num2 ;numero->num2
swapf num2,1 ;corregir nibbles
movf 0x05,0 ;puertoA->W
movwf aux ;W->aux
btfsc aux,0 ;si el primer bit de aux = 1
goto resta ;entonces vaya a resta
btfsc aux,1 ;sino, si el segundo bit de aux = 1
goto suma ;entonces vaya a suma ,sino,
goto carga ;vaya a carga y espere operación a realizar
;aqui se realiza la operación suma
suma movf num1,0 ;num1->W
addwf num2,0 ;(W + num2)->W
movwf resu ;W->resul
goto resulta ;salte a resultado
;aqui se realiza la operación resta
resta movf num1,0 ;num1->W
subwf num2,0 ;(W - num2)->W
movwf resu ;W->resul
goto resulta ;salte a resulta
;aqui se configura el puerto a como salida para mostrar el resultado
;en los leds y se espera un cambio de bit de menor peso del primer numero para
;realizar una nueva operación.
resulta bsf 0x03,5 ;selección del banco 1
movlw 0x00 ;00000->W
movwf 0x05 ;configura puerto A como salida
bcf 0x03,5 ;selección banco 0
movf resu,0 ;res->W
movwf 0x05 ;salida a los leds
;Aqui se espera a que el usuario active el switch correspondiente al bit de
; menor peso del primer numero para poder realizar una nueva operación.
; Debe moverlo no importa si esta en 1 o 0, el objetivo es que cambie de estado
; para que salga del bucle de espera,se raliza para dar una demora en la visualizacion
;de los leds
espera movf 0x06,0 ;puertoB->W
movwf aux ;se realiza para no cambiar
movf num1,0 ;la variable original
xorwf aux,1 ;la xor es para determinar si cambio de estado el 1º bit
btfss aux,0 ;si =0 no hay cambio :: si =1 hubo cambio
goto espera
bsf 0x03,5 ;selección banco 1 para volver a configurar
goto confi ;el puerto a como entrada temporal
end