Descarga la aplicación para disfrutar aún más
Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
PILA SEGMENT STACK DB 64 DUP('PILA') PILA ENDS DATOS SEGMENT msj db 0ah,0dh, 'Digita un numero', '$' msj2 db 0ah,0dh, 'Es perfecto', '$' msj3 db 0ah,0dh, 'No es perfecto', '$' vec db 10 dup (0) aux db 0 sum db 0 DATOS ENDS imprime macro cadena mov ah,09h mov dx,offset cadena int 21h endm pedir macro ;Pide el numero perfecto mov ah,01h int 21h sub ah,01h sub al,30h endm CODE SEGMENT ASSUME CS:CODE,SS:PILA, DS:DATOS Inicio: imprime msj ;llamada al macro para imprimir el mensaje 1 pedir ;Llamada al macro para pedir un número mov cx,ax ;respaldamos el número pedido en cx mov aux,cl ;Movemos el mismo número a una variable auxiliar mov bl,00h ;Empezamos a dividir desde 1 operacion: inc bx mov cl,aux ;Regresamos el número respaldado en la variable auxiliar mov ax,cx ;como la división se hacen sobre AX mandamos el número a AX. aad ;ajuste ascii para division mov cx,0000 ;limpiamos CX mov dx,0000 div bx ;se divide AX/BX, ax contiene el número digitado, bx es nuestro contador que va de 1 a n cmp dx,00h ;Comparo DX con 0, ya que DX contiene el residuo. ja operacion ;si es mayor a 0 repite operacion jb operacion ;si es menor a 0 repita operacion je compara ;si es igual a 0 salta a compara compara: ;esta etiqueta compara si bx ya llego a ser igual al número original cmp aux,bl je cmpperfecto ;si es igual pasa a comparar si es perfecto ja suma ;si no es igual pasa a suma jb suma suma: ;esta etiqueta suma el valor de bl a nuestra variable sum add sum,bl jmp operacion ;se repite operacion cmpperfecto: ;Etiqueta compara el valor sumado a mov al,sum cmp al,aux je perfecto ja noperfecto jb noperfecto perfecto: ;Solo imprime que es perfecto imprime msj2 jmp salir noperfecto: ;Solo imprime que NO es perfecto imprime msj3 jmp salir salir: mov ah,04ch int 21h CODE ENDS END Inicio
Compartir