Advertisement
ArCiGo

Menu

Apr 19th, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 6.78 KB | None | 0 0
  1. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
  2. ;     Este programa hace una simple suma de dos números utilizando el modo de direccionamiento inmediato
  3. ;                               en él se utilizan registros e instrucciones del ensamblador
  4. ;
  5. ;                   Ensamble este programa en el menú "Project" usando la opción
  6. ;                                           "Console Assemble and Link"
  7. ; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
  8.  
  9. .486                                    ;crea codigo de 32 bits
  10. .model flat, stdcall                    ;modelo de memoria de 32 bits
  11. option casemap: none                    ;sensible a mayusculas y minusculas
  12.  
  13. include \masm32\include\windows.inc     ;esta linea siempre debe ir primero
  14. include \masm32\macros\macros.asm       ;macros de apoyo de MASM
  15.  
  16. ; -----------------------------------------------------------------
  17. ;Incluir los archivos que tienen prototipos con formato de MASM para las llamadas de función
  18. ; -----------------------------------------------------------------
  19.  
  20. include \masm32\include\masm32.inc
  21. include \masm32\include\gdi32.inc
  22. include \masm32\include\user32.inc
  23. include \masm32\include\kernel32.inc
  24.  
  25. include \masm32\include\masm32rt.inc
  26.  
  27. ; ------------------------------------------------
  28. ; archivos de biblioteca que tienen las definiciones de las exportaciones
  29. ; de función y código probado  precompilado confiable.
  30. ; ------------------------------------------------
  31.  
  32. includelib \masm32\lib\masm32.lib
  33. includelib \masm32\lib\gdi32.lib
  34. includelib \masm32\lib\user32.lib
  35. includelib \masm32\lib\kernel32.lib
  36.  
  37. ;***********************************;
  38. ;Variables no inicializadas
  39. ;***********************************;
  40. .data?
  41.     var1        DB 10 dup(?)
  42.     resultado   DW 10 dup(?)
  43.  
  44. ;***********************************;
  45. ;Aqui empieza el codigo
  46. ;***********************************;
  47. .code
  48. start:
  49.     print chr$("Calculadora",13,10)
  50.     print chr$(13,10,13,10)
  51.    
  52.     mov eax, 1
  53.     ciclo:    call main                             ;Ciclo para llamar n veces a main, siempre y cuando decida continuar
  54.         loop ciclo              
  55. exit
  56.  
  57. ;***********************************;
  58. ;Menu
  59. ;***********************************;
  60. main proc
  61.        
  62.     LOCAL opti:     DWORD                           ;Variable para guardar seleccion del usuario, en relacion a operaciones
  63.     LOCAL bandera:  DWORD                           ;bandera para guardar seleccion, en relacion a continuacion con el programa
  64.  
  65.     print chr$("Seleccione",13,10)
  66.     print chr$("1:Suma",13,10)
  67.     print chr$("2: Resta",13,10)
  68.     print chr$("3: Multiplicacion",13,10)
  69.     print chr$("4: Division",13,10)
  70.     print chr$("5: Potencia",13,10)
  71.     print chr$("6: Factorial",13,10)
  72.     print chr$("7: Raiz Cuadrada",13,10)
  73.  
  74.     print chr$(13,10)
  75.     mov opti, sval(input("Ingrese opcion: "))       ;Opcion del usuario
  76.  
  77.     .IF opti == 1                                   ;Caso 1, suma
  78.         call suma  
  79.     .ELSEIF opti == 2                               ;Caso 2, resta
  80.         call resta
  81.     .ELSEIF opti == 3                               ;Caso 3, multiplicacion  
  82.         call multiplicacion
  83.     .ELSEIF opti == 4                               ;Caso 4, dvision
  84.         call division
  85.     .ELSEIF opti == 5                               ;Caso 5, potencia
  86.         call potencia
  87.     .ENDIF                                          ;termina IF...ELSE    
  88.  
  89.     print chr$(13,10)
  90.     mov bandera, sval(input("0.- Continuar, 1.- Salir: "))      ;Menu de seleccion para continuar con el programa
  91.     mov ecx, bandera                                            ;Guardo seleccion, bandera, en el registro ECX
  92.    
  93.     ;En caso de que salga
  94.     ;print str$(input("Presione enter para abandonar la aplicacion"))    
  95.     ret
  96.  
  97.     ;invoke StdIn, ADDR var1, 10
  98. main endp
  99.  
  100. ;***********************************;
  101. ;Suma
  102. ;***********************************;
  103. suma proc
  104.  
  105.     LOCAL num1: DWORD
  106.     LOCAL num2: DWORD
  107.     LOCAL resu: DWORD
  108.  
  109.     mov num1, sval(input("Ingrese primer numero: "))
  110.     mov num2, sval(input("Ingrese segundo numero: "))
  111.     print chr$(13,10)
  112.    
  113.     mov eax, num1
  114.     mov ecx, num2
  115.     add ecx, eax
  116.     push ecx
  117.     print "El resultado es: "
  118.     pop eax
  119.     push eax
  120.     invoke dwtoa, eax, addr resultado
  121.     invoke StdOut, addr resultado
  122.     print chr$(13,10,13,10)
  123.     pop ecx
  124.    
  125. suma endp
  126.  
  127. ;***********************************;
  128. ;Resta
  129. ;***********************************;
  130. resta proc
  131.  
  132.     LOCAL num1: DWORD
  133.     LOCAL num2: DWORD
  134.     LOCAL resu: DWORD
  135.  
  136.     mov num1, sval(input("Ingrese primer numero: "))
  137.     mov num2, sval(input("Ingrese segundo numero: "))
  138.     print chr$(13,10)
  139.    
  140.     mov eax, num1
  141.     mov ecx, num2
  142.     sub ecx, eax
  143.     push ecx
  144.     print "El resultado es: "
  145.     pop eax
  146.     push eax
  147.     invoke dwtoa, eax, addr resultado
  148.     invoke StdOut, addr resultado
  149.     print chr$(13,10,13,10)
  150.     pop ecx
  151.    
  152. resta endp
  153.  
  154. ;***********************************;
  155. ;Multiplicacion
  156. ;***********************************;
  157. multiplicacion proc
  158.  
  159.     LOCAL num1: DWORD
  160.     LOCAL num2: DWORD
  161.     LOCAL resu: DWORD
  162.  
  163.     mov num1, sval(input("Ingrese primer numero: "))
  164.     mov num2, sval(input("Ingrese segundo numero: "))
  165.     print chr$(13,10)
  166.  
  167.     mov eax, num1
  168.     mov ecx, num2
  169.     mul ecx
  170.     push eax
  171.     print "El resultado es: "
  172.     pop eax
  173.     push eax
  174.     invoke dwtoa, eax, addr resultado
  175.     invoke StdOut, addr resultado
  176.     print chr$(13,10,13,10)
  177.     pop ecx
  178.    
  179. multiplicacion endp
  180.  
  181. ;***********************************;
  182. ;Division
  183. ;***********************************;
  184. division proc
  185.  
  186.     LOCAL num1: DWORD
  187.     LOCAL num2: DWORD
  188.     LOCAL resu: DWORD
  189.  
  190.     mov num1, sval(input("Ingrese primer numero: "))
  191.     mov num2, sval(input("Ingrese segundo numero: "))
  192.     print chr$(13,10)
  193.  
  194.     mov ebx, num1
  195.     mov ecx, num2
  196.     mov eax,ebx
  197.     mov edx,0
  198.     mov num2, ecx
  199.     div ecx
  200.     mov num1,edx
  201.     print str$(eax)
  202.     print chr$(".")
  203.     mov eax,100
  204.     mul num1
  205.     div num2
  206.     print str$(eax)
  207.     print chr$(13,10)
  208.    
  209. division endp
  210.  
  211. ;***********************************;
  212. ;Potencia
  213. ;***********************************;
  214. potencia proc
  215.  
  216.     LOCAL num1: DWORD
  217.     LOCAL num2: DWORD
  218.     LOCAL resu: DWORD
  219.  
  220.     mov num1, sval(input("Ingrese primer numero: "))
  221.     mov num2, sval(input("Ingrese segundo numero: "))
  222.     print chr$(13,10)
  223.  
  224.     mov ecx, num2
  225.     mov eax, 1
  226.  
  227.     cicloIntern: mul num1
  228.         loop cicloIntern
  229.  
  230.     print str$(eax)
  231.    
  232. potencia endp
  233.  
  234. ;***********************************************************
  235.  
  236. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement