Calculadora que suma, resta, divide, multiplica y potencia.

include andres.h
INCLUDE ISC.H
RC   EQU 10
LONG EQU 10

.MODEL SMALL
.STACK
.DATA

 msg10 db “Menu… Escoja una opcion.”,”$”
 msg11 db “a) Adicion”,”$”
 msg12 db “b) Sustraccion”,”$”
 msg13 db “c) Multiplicacion”,”$”
 msg14 db “d) Divicion”,”$”
 msg15 db “e) Potencia”,”$”
 msg50 db “s) Salir”,”$”
 msg60 db “v) Volver a realizar operacion con nuevos numeros.”,”$”
 msg16 db “Opcion: “,”$”
 msg17 db “Primer cifra: “,”$”
 msg18 db “Segunda cifra: “,”$”
 msg100 db “Resultado: “,”$”
 opcion db 1 dup (” “)

 error1 db “Opcion no valida vuelve a elegir opcion.”,”$”
 error2 db “Debe elegir solo digitos (0,…,9).”,”$”
 error3 db “Debe presionar enter.”,”$”

 MSJ1 DB “ESCRIBE EL PRIMER  NUMERO : “,”$” 
 MSJ2 DB “ESCRIBE EL SEGUNDO NUMERO : “,”$”
 NUM1 DB 10 DUP (0)
 NUM2 DB 10 DUP (0)
 NUM1AUX DB 10 DUP (0)
 NUM2AUX DB 10 DUP (0)
 CONTROL1 DB 0
 CONTROL2 DB 0
 residuo dw 0
 CUCO1  DW 0
 CUCO2  DW 0
 DIEZ   DW 1
 DIEZ1  DW 1
 NUM1BIN DW 10 dup (0)
 NUM2BIN DW 10 dup (0)
 SUMABIN DW 10 dup (0)
 RESULTSUM DB 10 DUP(‘ ‘)
.CODE
;——————————————————————-
;——————————————————————-
proc muestraMenu far
 fondo 

 ir 7,10
 vermsg msg10

 prin:
  ir 9,10
  vermsg msg11
  ir 10,10
  vermsg msg12
  ir 11,10
  vermsg msg13
  ir 12,10
  vermsg msg14
  ir 13,10
  vermsg msg15
  ir 15,10
  vermsg msg16

  capcharv

  mov opcion,al
 
  cmp al,97
  je cap
  cmp al,98
  je cap
  cmp al,99
  je cap
  cmp al,100
  je cap
  cmp al,101
  je cap
  
 er1: 
  fondo
  ir 4,20
  vermsg error1
  jmp prin
 cap:
 ret
endp
;—————————-NUMERO 1——————————- 
;——————————————————————-
;——————————————————————-
numerouno proc far
 IRXY 8,10
 VERMSJ MSJ1

 MOV BX,0
CICLO1: 
 PONERCAR 8
SIGUE1:
 CAPCAR
        ;——————–VALIDACION——–
 CMP AL,13
 JE ORDENAR
 CMP AL,30H
  JL CICLO1
  CMP AL,39H
  JA CICLO1
 ;———–VALIDACION SUPERADA Y GUARDANDO———
 MOV NUM1AUX[BX],AL
 INC BX 
 INC CONTROL1
 INC CUCO1
 CMP CONTROL1,10
 JNE SIGUE1
 ;—————-ORDENANDO——
ORDENAR:
 MOV AX,CUCO1
 MOV BX,LONG
 SUB BX,AX 

 MOV SI,0 
CICLO2:  
 MOV CL,NUM1AUX[SI]
 MOV NUM1[BX],CL
 INC SI
 INC BX
 CMP BX,10
 JNE CICLO2
 
 ret
endp
;—————————-NUMERO 2——————————- 
numerodos proc far

 IRXY 9,10
 VERMSJ MSJ2

 MOV BX,0
CICLO3: 
 PONERCAR 8
SIGUE2:
 CAPCAR
        ;——————–VALIDACION——–
 CMP AL,13
 JE ORDENAR1
 CMP AL,30H
  JL CICLO3
  CMP AL,39H
  JA CICLO3
 ;———–VALIDACION SUPERADA Y GUARDANDO———
 MOV NUM2AUX[BX],AL
 INC BX 
 INC CONTROL2
 INC CUCO2
 CMP CONTROL2,10
 JNE SIGUE2
 ;—————-ORDENANDO——
ORDENAR1:
 MOV AX,CUCO2
 MOV BX,LONG
 SUB BX,AX
 
 MOV SI,0 
CICLO4:  
 MOV CL,NUM2AUX[SI]
 MOV NUM2[BX],CL
 INC SI
 INC BX
 CMP BX,10
 JNE CICLO4 

 ret
endp
 ;————–MOSTRAR CAPTURA——————-
;——————————————————
;——————————————————

QUITARCERO PROC FAR

 MOV BX,0 
CICLO5:
 MOV AL,NUM1[BX]
 AND AL,00001111B
 MOV NUM1[BX],AL
 MOV CL,NUM2[BX]
 AND CL,00001111B
 MOV NUM2[BX],CL
 INC BX
 CMP BX,10
 JNE CICLO5
 RET
ENDP
;—————————————————–
;——————————————————
convert1 proc far
 MOV AX,0
 MOV BX,10
 MOV CX,10
 LEA SI,NUM1+9
MARCA:
 MOV AL,[SI]
 AND AX,000FH
 MUL DIEZ
 ADD NUM1BIN,AX
 MOV AX,DIEZ
 MUL BX
 MOV DIEZ,AX
 DEC SI
 LOOP MARCA
 RET
ENDP
;——————————————————
convert2 proc far
 MOV AX,0
 MOV BX,10
 MOV CX,10
 LEA SI,NUM2+9
MARCA1:
 MOV AL,[SI]
 AND AX,000FH
 MUL DIEZ1
 ADD NUM2BIN,AX
 MOV AX,DIEZ1
 MUL BX
 MOV DIEZ1,AX
 DEC SI
 LOOP MARCA1
 RET
ENDP
;——————————————————

SUMA MACRO a,b,total
 PUSH   AX
 MOV    AX,a
 ADD    AX,b
 MOV    total,AX
 POP    AX
 ENDM
;——————————————————
RESTA MACRO a,b,total
 PUSH   AX
 MOV    AX,a
 SUB    AX,b
 MOV    total,AX
 POP    AX
 ENDM
;——————————————————
convbinascii proc far

 MOV CX, 0010
 LEA SI, RESULTSUM+9
 MOV AX, SUMABIN

CICLO6:
 CMP AX,CX
 JB  CICLO7
 XOR DX,DX
 DIV CX
 OR DL,30H
 MOV [SI],DL
 DEC SI
 JMP CICLO6

CICLO7:
 OR AL,30H
 MOV [SI],AL
; mov resultsum,[si]
 ret
endp
;——————————————————
;——————————————————
multi proc far
 MOV Ax,num1bin
 MUL num2bin
 MOV sumabin,ax
 RET
endp
;——————————————————
;——————————————————
divide proc far
 mov ax,num1bin
 mov residuo,ax
 mov bx,num2bin
 mov si,0
ciclo35:
 cmp residuo,bx
 jb termina1
 PUSH   AX
 MOV    AX,residuo
 SUB    AX,num2bin
 MOV    residuo,AX
 inc si
 POP    AX
 jmp ciclo35
termina1:
 mov  sumabin,si
 ret
endp
;——————————————————
;——————————————————
potencia proc far
 mov  ax,0001h
 mov  sumabin,ax
 mov  di,0
ciclo40:
 cmp  di,num2bin
 je  termina2
 MOV  Ax,num1bin
 MUL  sumabin
 MOV  sumabin,ax
 inc  di
 jmp ciclo40
termina2:
 RET
endp
;——————————————————
;——————————————————
proceso1 proc far

 cmp opcion,97
 je adicion
 cmp opcion,98
 je sustraccion
 cmp opcion,99
 je multiplicacion
 cmp opcion,100
 je division
 cmp opcion,101
 je elevar

adicion:
 suma num1bin,num2bin,sumabin
 jmp hecho

sustraccion:
 resta num1bin,num2bin,sumabin
 jmp hecho

multiplicacion:
 call multi
 jmp hecho

division:
 call divide
 jmp hecho

elevar:
 call potencia
 jmp hecho

hecho:

ret
endp
;——————————————————
;——————————————————
proceso2 proc far

CALL CONVBINASCII

 IRXY 11,10
 vermsg msg100
 MOSTRARCAPTURA 10,resultsum

 ir  22,10
 vermsg msg50
 ir 23,10
 vermsg msg60

 ir 15,10
 capcharv
 mov opcion,al
ret
endp
;——————————————————
;——————————————————
limpiar proc far
 mov di,0
cic:
 mov  sumabin[di],0
 mov resultsum[di],0
 inc di
 cmp di,10
 jne cic
ret
endp
;——————————————————
;——————————————————
;—————————————————
INICIO
comien:
 call muestraMenu

 cmp opcion,115
 je saldeaqui

 PANTALLA AZULBLANCO
 CALL NUMEROUNO
 CALL NUMERODOS
 CALL CONVERT1
 CALL CONVERT2

regresa:

 call proceso1 

 call proceso2

 cmp  opcion,118
 je comien
 cmp  opcion,115
 jne regresa 

 IRXY 24,10
saldeaqui:
FIN

About these ads

51 comentarios

  1. hola andres!
    soy naira, tengo que hacer una unidad aritmetico logica en lenguaje ensamblador y c (creo) para la asignatura estructura de computadores II. Soy de Valladolid, por si eso ayuda (nose xa q xo weno jaja).
    El tema es: que consiga pedir dos numeros A y B por pantalla, de 4 digitos, y que pueda sumarles, restarles, multiplicarles y dividirles.
    He visto el cosigo en tu pagina,pero no me entero de nada, y no se si me sirve de algo en mi trabajo.MUCHAS GRACIAS POR ADELANTADO ;)

  2. Mira Naira, el programa k puse, es totalmente funcional, probado en mi clase. funciona de la sig. manera: En ambiente windows abres el Simbolo del Sistema (si es WXP) o command (si es W95, W98), de ahi buscas el directorio donde lo almacenaste y lo ejecutas.
    El codigo que muestro tal ves no es muy comprensivo porque utiliza las librerias descritas en esta pagina las que son ISC.H y andres.H , recuerda que tienen que estar guardadas con extencion H.
    Ahora, no se que compilador utilices, pero para poder compilar este codigo ensamblador utilizamos el tasm.

    Deja tu correo para poder comunicarme contigo ya que asi no puedo estar seguro si leeras esto o no.

  3. Andres este programa puede servir sin utilizar la libreria que mencionas

  4. Hola David.
    MMMM, si puede sin las librerias pero hay un problema…, las macros son las que estan contenidas en la libreria, si se las quitas… tienes que sustituir las macros por su codigo equivalente (el que corresponde a esa macro), ese es el primer problema… que tendrias que estar cambiando todas las llamadas a las macros dentro del programa; otro sera que… al cambiar las macros por sus codigos equivalentes… el programa se haria mas largo… y esto ocacionaria que los brincos (jmp) a veces no llegaran a donde deben de ir… y el compilador te marcaria error, esto pues lo resuelves colocando saltos intermedios. Jejeje, no se si me explique. Bueno, espero que te sirva mi comentario… y disculpa por tardar en atenderte.

    Su servilleta: Malandres.

  5. hola , bye

  6. Hola Rosa, hasta pronto.

  7. hola
    quien eres

  8. Hola.. estaba viendo tu programa para guiarme en uno que tengo que hacer.. en assembler pero en el 8085.. es una calculadora de 6 digito.. 4 enteros y dos decimales.. que los datos entren por un teclado y se muestren en un display.. pero tengo algunas dudas.. pues es la primera vez que voy a programar en assembler.. y queda poco tiempo pa entregar la asignacion.

  9. hola como estas, voy empezando a utilizar ensamblador no se si puedes ayudarme con las suma de 2 numero introducidos desde el teclado, quisiera que me mandaras el codigo a mi correo, pero quisiera que fuera un codigo muy sencillo.

    mi correo es ecortes278@hotmail.com

  10. Sklep komputerowy z tanimi czesciami komputerowymi:
    sklep komputerowy

  11. cuales son los valores de X y de Y para la ecuacion X(elevado a la 3) + XY(elevado a la 2) – Y (elevado a la 2)

  12. hola malandres te felicito por tu programa pero tengo una pequeña duda como le harias para que programa las operaciones con valores de hasta 10 digitos

  13. Que onda malandres fijate que yo corri tu ejemplo y funciono me gustaria saber como le harias para llegar hasta 20 digitos en las operaciones. Soy un principiante en assembler.

  14. @Luis Vasquez: Hace tu tarea Guicho :-D

  15. ¿ kien es Guicho ?

  16. ¿pero como conseguimos esas librerias?, ¿podrias poner un enlace para descargarlas? requiero de tu programa y me urge.

    Gracias por tu aporte a la humanidad

  17. agregame vale_salta_94@… me llamo vale jajajja yu

  18. hola
    me llamo vale
    tengo 14
    jajaaj

  19. 0020000+0002220 CUANTO ES ??=·$

  20. CUENTO ES 440+550

  21. que maricos son

  22. Muchas gracias por este code!
    me ha sido de mucho ayuda espero puedas agregarme como tu contacto en el messenger :S
    La verdad que me hace un buen tutoriado de lenguaje ensamblador
    gracias de antemando!

  23. agregame necesito ayuda con el codigo, saludos cesar

  24. hola me gustaria que me ayudes porfavor ya que debo hacer un programa parecido solo que en simuproc si me puedes ayudar te lo agradecere
    te de mi mail. nickynaag_3@yahoo.com

  25. hola a todos nesecito hacer una calculadora, no se si alguien me puede ayudar me urgue para el curso de assembler, por otro lado no puedo hacer la conexion del puerto paralelo, mi sistema operativos es vista, estoy usando macroassembler, quiero encender una luces en unos leds me urgue si alguiem me puede ayyudar, mi correo es luisitoangelito28@hotmail.com, muy agradecido

  26. andres no puedo correr tu codigo me sales este mensaje de error:
    Assembling: C:\pruebas\nene.asm
    MASM : fatal error A1000: cannot open file : C:\pruebas\nene.asm
    El volumen de la unidad C no tiene etiqueta.
    El n£mero de serie del volumen es: 9AFB-8CC1

    Directorio de C:\pruebas

    10/06/2009 02:00 p.m. 5,996 nene.txt
    1 archivos 5,996 bytes
    0 dirs 48,210,395,136 bytes libres
    si me puede ayudar te lo agradesco

  27. hola luis… lo que pasa es que el programa esta diseñado para ser compilado en el TASM pero no en el MASM. la verdad no se en que se diferencie en cuanto al codigo. :s Saludos.

  28. hey este programa esta chido me salvaste la vida porque en un examen venia un problema igualito y ya lo hice excelente aporte sigue asi no te critico nada por que no soy de esas personas

  29. loqo toi pidiendo una calcularora i no me apareze nadaa
    QE BRONKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

  30. Hola andres ; Me podrias ayudar hacer uno parecido pero con mas digitos …, probe el codigo de aqui , pero no me da los resultados correctos …y en el potencia me salen mucho simbolos …..podrias ayudarme hacer el codigo de una calculadora pero con dos digitos max…es para calificacion ., es un proyecto , por faaaa, lenguaje ensamblador esta algo enredado –si le entiendo pero muy poco …gracias ..es para el jueves el proyecto si me podrias ayudar …

  31. que rabia estoy buscando una calculadora y me sale esto cojan oficio

  32. hola la verdad en este webo tendrian que poner una calcu x q soy tan vaga que no kiero aserlo con mi mente jjajajjajajajajajajaja

  33. que es magnifico la conputadora i claro tanbien la calculadora chau besos para el que lo lee

  34. que es magnifico la conputadora i claro tanbien la calculadora chau besos para el que lo lee i estan adorables

  35. que es andres.h

  36. OLA ANDRES TENGO KE ASER UNA CALCULADORA EN EXEL 2003 II NOSE COMO EMPEZAR ME PUEDES AYUDAR XFAVOR!!

  37. aj yo quiero que salga la calculadora para poner los N.N para que me salga el resultado

  38. ja ja ja ja ja ja ja ja ja ja ja ja ja los odiooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo☺☻♥♦♣♠•◘○

  39. Oye fijate que cabal estoy en mi clase de Assembler, y tenemos que hacer una calculadora que suma, divida, reste y multiplique, pero estamos usando la arquitectura 8086, mi pregunta es si me puedes ayudar? dejo mi correo adjunto lei tu codigo y lo pege en mi Ensamblador pero no tengo andres.H

  40. haiii hola gente miren acabo de ntrar a la secu y se me dificultan las potencias alguien podria ayudarme o esplicarme les agradeceria mucho

  41. busco calcuradora para agregsr radicacion y me salis con esta mierda .|.

  42. no se si alguien tiene las librerias del programa… andres si las tienes porfavor mandamelas chivdihe@hotmail.con

  43. gracias pero esto no me ayudo

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: