Programación General > ASM (Ensamblador)
como puedo leer correctamente las entradas?
(1/1)
Karin2009:
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 --- %include "asm_io.inc" segment .data prompt1 db "Ingrese valor : ",0 prompt2 db "%f",0 prompt3 db "El valor ingresado es %f",10,0 segment .bss a resw 1 segment .text global pedir extern printf, scanf pedir: enter 0,0 ; setup routine pusha ;printf(prompt1) push prompt1 call printf add esp,4 ;scanf("%f",&a) push a push prompt2 call scanf add esp,8 fld dword[a] push prompt3 call printf add esp, 8 salir: popa mov eax, 0 ; return back to C leave ret
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:
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].
Navegación
Ir a la versión completa