Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: jhon palacios en 12 Diciembre 2016, 16:26 pm



Título: menu y operaciones en ASM
Publicado por: jhon palacios en 12 Diciembre 2016, 16:26 pm
me están pidiendo esto


Realice el prototipo funcional en lenguaje Ensamblador, que incluya el siguiente menú de opciones:
MENÚ
1. Datos del autor
2. Suma de dos números
3. Resta de dos números
4. Multiplicación de dos números
5. División de dos números
6. Validar si un número es positivo o negativo
7. Salir

y tengo el codigo pero no se aplica el paso 6

Código
  1. name: " PROTOTIPO FINAL"
  2. org 100h ; inicio de programa
  3.  
  4. include 'emu8086.inc' ;Incluye funciones de libreria emu8086
  5. DEFINE_SCAN_NUM
  6. DEFINE_PRINT_STRING
  7. DEFINE_PRINT_NUM
  8. DEFINE_PRINT_NUM_UNS
  9.  
  10.  
  11. jmp inicio
  12.  
  13.  
  14.  
  15. menu1 db 13,10,'JHON JARLIN JARLIN PALACIOS',13,10,
  16.      db 13,10,'Codigo 1010141445',13,10,
  17.      db 13,10,'Universidad Nacional Abierta y a Distancia',13,10,
  18.      db 13,10,'Cead Quibdo',13,10
  19.      db 13,10,'Fecha:Diciembre 10 de 2016',13,10,
  20.      db 13,10, '******MENU******',13,10,
  21.      db 13,10,'1 Suma de dos numeros ',13,10,
  22.      db 13,10,'2 Resta de dos numeros ' ,13,10,
  23.      db 13,10,'3 Multiplicacion de dos numeros ',13,10,
  24.      db 13,10,'4 Division de dos numero',13,10,                        
  25.      db 13,10,'5 Validar numeros negativos y positivos',13,10,
  26.      db 13,10,'6 Salir ' ,13,10,
  27.  
  28.  
  29.  
  30. db 13,10,13,10,'Digite el Primer Numero: $'
  31. texto2 db 13,10,13,10,'Digite el Segundo Numero: $'
  32. texto3 db 13,10,13,10, 'La Suma Es: $'
  33. texto4 db 13,10,'La Resta Es: $'
  34. texto5 db 13,10,'La Multiplicacion Es: $'
  35. texto6 db 13,10,'La Divison es: $'  
  36. texto7 db 13,10,'positivo: $'  
  37. texto8 db 13,10,'negativo: $'
  38. texto9 db 13,10,'cero: $'
  39.  
  40. num1 dw ? ;defino variables de 2 bytes
  41. num2 dw ? ; el simbolo ? es para indicar q no se inicilizan con valor algunp
  42.  
  43. inicio:
  44.  
  45. mov ah,09 ;instruccion para imprimir en pantalla
  46. lea dx,menu1 ;carga cadena de texto 1 en dx
  47. int 21h ;interrupcion pantalla
  48.  
  49. call SCAN_NUM ;Llama Funcion SCAN_NUM que toma numero de teclado; el valor se guarda en ax
  50. mov num1,cx ;mueve numero a variable num1
  51.  
  52. mov ah,09 ;interrupcion para imprimir en pantalla
  53. lea dx,texto2 ;carga cadena de texto 2 en dx
  54. int 21h
  55.  
  56. call SCAN_NUM ;Llama Funcion SCAN_NUM que toma numero de teclado; el valor se guarda en ax
  57. mov num2,cx ;mueve numero a variable num2
  58.  
  59. mov ah,09
  60. lea dx,texto3
  61. int 21h
  62.  
  63. mov ax,num1 ;mueve primer numero digitado a ax
  64. add ax,num2 ;suma los numeros digitado, queda almacenaddo en ax
  65. call PRINT_NUM
  66.  
  67. mov ah,09
  68. lea dx,texto4
  69. int 21h
  70. mov ax,num1 ;mueve primer numero digitado a ax
  71. sub ax,num2 ;resta el 2do del 1er numero, queda almacenaddo en ax
  72. call PRINT_NUM
  73.  
  74.  
  75.  
  76. mov ah,09
  77. lea dx,texto5
  78. int 21h
  79. mov ax,num1 ;mueve primer numero digitado a ax
  80. mov bx,num2 ;mueve segundo numero digitado a bx
  81. mul bx ;ax = ax*bx
  82. call PRINT_NUM
  83.  
  84. mov ah,09
  85. lea dx,texto6
  86. int 21h
  87. xor dx,dx ;deja en cero dx; si no lo hago se desborda la division
  88. ;DX ALMACENA EL modulo de la division, por eso hay q dejarlo en cero
  89. mov ax,num1 ;mueve primer numero digitado a ax
  90. mov bx,num2 ;mueve segundo numero digitado a bx
  91. div bx ;ax = ax*bx
  92. call PRINT_NUM  
  93.  
  94. cmp bl,0
  95.  
  96.  
  97. mov ah,09h
  98. lea dx,texto7
  99. int 21h
  100.  
  101. mov ah,09h
  102. lea dx,texto8
  103. int 21h
  104.  
  105. mov ah,09h
  106. lea dx,texto9
  107. int 21h
         

Me pueden ayudar??


Mod: Los códigos deben ir en etiquetas GeSHi, el titulo debe ser descriptivo


Título: Re: menu y operaciones en ASM
Publicado por: xv0 en 12 Diciembre 2016, 17:27 pm
Hola

Para saber si un numero es negativo o positivo, tienes que comprobar el bit mas significativo, el bit 7.

Podrias hacer la comprobacion con un AND, luego comprobar el estado de la flag SF y saltar con un JS, en este caso si el bit significativo es 1, sera negativo y saltara, si es 0 es positivo y de lo contrario no procede.

Un saludo.

P.D: Lo del bit 7, es depende del tamaño del entero, mejor dejalo como en el bit mas a la izquierda.