Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
- ; Este programa hace una simple suma de dos números utilizando el modo de direccionamiento inmediato
- ; en él se utilizan registros e instrucciones del ensamblador
- ;
- ; Ensamble este programa en el menú "Project" usando la opción
- ; "Console Assemble and Link"
- ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
- .486 ;crea codigo de 32 bits
- .model flat, stdcall ;modelo de memoria de 32 bits
- option casemap: none ;sensible a mayusculas y minusculas
- include \masm32\include\windows.inc ;esta linea siempre debe ir primero
- include \masm32\macros\macros.asm ;macros de apoyo de MASM
- ; -----------------------------------------------------------------
- ;Incluir los archivos que tienen prototipos con formato de MASM para las llamadas de función
- ; -----------------------------------------------------------------
- include \masm32\include\masm32.inc
- include \masm32\include\gdi32.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- include \masm32\include\masm32rt.inc
- ; ------------------------------------------------
- ; archivos de biblioteca que tienen las definiciones de las exportaciones
- ; de función y código probado precompilado confiable.
- ; ------------------------------------------------
- includelib \masm32\lib\masm32.lib
- includelib \masm32\lib\gdi32.lib
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
- ;***********************************;
- ;Variables no inicializadas
- ;***********************************;
- .data?
- var1 DB 10 dup(?)
- resultado DW 10 dup(?)
- ;***********************************;
- ;Aqui empieza el codigo
- ;***********************************;
- .code
- start:
- print chr$("Calculadora",13,10)
- print chr$(13,10,13,10)
- mov eax, 1
- ciclo: call main ;Ciclo para llamar n veces a main, siempre y cuando decida continuar
- loop ciclo
- exit
- ;***********************************;
- ;Menu
- ;***********************************;
- main proc
- LOCAL opti: DWORD ;Variable para guardar seleccion del usuario, en relacion a operaciones
- LOCAL bandera: DWORD ;bandera para guardar seleccion, en relacion a continuacion con el programa
- print chr$("Seleccione",13,10)
- print chr$("1:Suma",13,10)
- print chr$("2: Resta",13,10)
- print chr$("3: Multiplicacion",13,10)
- print chr$("4: Division",13,10)
- print chr$("5: Potencia",13,10)
- print chr$("6: Factorial",13,10)
- print chr$("7: Raiz Cuadrada",13,10)
- print chr$(13,10)
- mov opti, sval(input("Ingrese opcion: ")) ;Opcion del usuario
- .IF opti == 1 ;Caso 1, suma
- call suma
- .ELSEIF opti == 2 ;Caso 2, resta
- call resta
- .ELSEIF opti == 3 ;Caso 3, multiplicacion
- call multiplicacion
- .ELSEIF opti == 4 ;Caso 4, dvision
- call division
- .ELSEIF opti == 5 ;Caso 5, potencia
- call potencia
- .ENDIF ;termina IF...ELSE
- print chr$(13,10)
- mov bandera, sval(input("0.- Continuar, 1.- Salir: ")) ;Menu de seleccion para continuar con el programa
- mov ecx, bandera ;Guardo seleccion, bandera, en el registro ECX
- ;En caso de que salga
- ;print str$(input("Presione enter para abandonar la aplicacion"))
- ret
- ;invoke StdIn, ADDR var1, 10
- main endp
- ;***********************************;
- ;Suma
- ;***********************************;
- suma proc
- LOCAL num1: DWORD
- LOCAL num2: DWORD
- LOCAL resu: DWORD
- mov num1, sval(input("Ingrese primer numero: "))
- mov num2, sval(input("Ingrese segundo numero: "))
- print chr$(13,10)
- mov eax, num1
- mov ecx, num2
- add ecx, eax
- push ecx
- print "El resultado es: "
- pop eax
- push eax
- invoke dwtoa, eax, addr resultado
- invoke StdOut, addr resultado
- print chr$(13,10,13,10)
- pop ecx
- suma endp
- ;***********************************;
- ;Resta
- ;***********************************;
- resta proc
- LOCAL num1: DWORD
- LOCAL num2: DWORD
- LOCAL resu: DWORD
- mov num1, sval(input("Ingrese primer numero: "))
- mov num2, sval(input("Ingrese segundo numero: "))
- print chr$(13,10)
- mov eax, num1
- mov ecx, num2
- sub ecx, eax
- push ecx
- print "El resultado es: "
- pop eax
- push eax
- invoke dwtoa, eax, addr resultado
- invoke StdOut, addr resultado
- print chr$(13,10,13,10)
- pop ecx
- resta endp
- ;***********************************;
- ;Multiplicacion
- ;***********************************;
- multiplicacion proc
- LOCAL num1: DWORD
- LOCAL num2: DWORD
- LOCAL resu: DWORD
- mov num1, sval(input("Ingrese primer numero: "))
- mov num2, sval(input("Ingrese segundo numero: "))
- print chr$(13,10)
- mov eax, num1
- mov ecx, num2
- mul ecx
- push eax
- print "El resultado es: "
- pop eax
- push eax
- invoke dwtoa, eax, addr resultado
- invoke StdOut, addr resultado
- print chr$(13,10,13,10)
- pop ecx
- multiplicacion endp
- ;***********************************;
- ;Division
- ;***********************************;
- division proc
- LOCAL num1: DWORD
- LOCAL num2: DWORD
- LOCAL resu: DWORD
- mov num1, sval(input("Ingrese primer numero: "))
- mov num2, sval(input("Ingrese segundo numero: "))
- print chr$(13,10)
- mov ebx, num1
- mov ecx, num2
- mov eax,ebx
- mov edx,0
- mov num2, ecx
- div ecx
- mov num1,edx
- print str$(eax)
- print chr$(".")
- mov eax,100
- mul num1
- div num2
- print str$(eax)
- print chr$(13,10)
- division endp
- ;***********************************;
- ;Potencia
- ;***********************************;
- potencia proc
- LOCAL num1: DWORD
- LOCAL num2: DWORD
- LOCAL resu: DWORD
- mov num1, sval(input("Ingrese primer numero: "))
- mov num2, sval(input("Ingrese segundo numero: "))
- print chr$(13,10)
- mov ecx, num2
- mov eax, 1
- cicloIntern: mul num1
- loop cicloIntern
- print str$(eax)
- potencia endp
- ;***********************************************************
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement