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

[0] Índice de Mensajes

Ir a la versión completa