• Domingo 22 de Diciembre de 2024, 04:14

Autor Tema:  como puedo leer correctamente las entradas?  (Leído 1356 veces)

Karin2009

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
como puedo leer correctamente las entradas?
« en: Miércoles 29 de Abril de 2009, 13:31 »
0
Hola, estoy trabajando con nasm, y me ha surgido un error en un programa que estoy haciendo que usa las funciones externas de C printf y scanf. El programa en ensamblador solicita un numero real, lo lee y lo vuelve a imprimir en pantalla con sus respectivos mensajes. El programa que tengo es este:

Código: ASM
  1.  
  2. %include "asm_io.inc"
  3.  
  4. segment .data
  5.     prompt1  db "Ingrese valor : ",0
  6.     prompt2  db "%f",0
  7.         prompt3  db "El valor ingresado es %f",10,0
  8.  
  9. segment .bss
  10.     a  resw 1
  11.  
  12. segment .text
  13.         global pedir
  14.     extern printf, scanf
  15.  
  16.     pedir:
  17.             enter   0,0               ; setup routine
  18.             pusha
  19.    
  20.         ;printf(prompt1)
  21.         push prompt1
  22.         call printf
  23.         add esp,4
  24.    
  25.         ;scanf("%f",&a)
  26.         push a
  27.         push prompt2
  28.         call scanf
  29.         add esp,8
  30.        
  31.         fld dword[a]
  32.         push prompt3
  33.         call printf
  34.         add esp, 8
  35.    
  36.     salir:          
  37.         popa
  38.             mov     eax, 0            ; return back to C
  39.             leave                    
  40.             ret
  41.  
  42.  

Este programa es llamado por otro en C, compila bien y lo enlazo con el que lo llama usando gcc; pero cuando lo  ejecuto, aparce en la pantalla algo como esto:

Ingrese valor:123
El valor ingresado es -0.000000

El valor q ingreso es 123 y me devuelve ese otro valor, agradeceria si alguien me dice en q me estoy equivocando para corregirlo
Muchas gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: como puedo leer correctamente las entradas?
« Respuesta #1 en: Miércoles 29 de Abril de 2009, 14:11 »
0
Ya hiciste el push a la pila de la FPU con fld, ahora necesitas hacer el pop desde la pila de la FPU a la pila, usa - el equivalente a - fstp qword ptr [esp].

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.