I am new to Assembly and have been trying to write a program to read a float, store it and then print it, the problem is when I print it with %f
flag it prints 0.0 although the scan flag is also %f
and the type is .float
.section .data # memory variables
format: .asciz "%f" # string terminated by 0 that will be used for scanf parameter
n: .float 0.0 # the variable n which we will get from user using scanf and will be printed by printf
.section .text # instructions
.globl _main # make _main accessible from external
_main: # the label indicating the start of the program
pushl $n # push to stack the second parameter to scanf (the address of the integer variable n) the char "l" in pushl means 32-bits address
pushl $format # push to stack the first parameter to scanf
call _scanf # call scanf, it will use the two parameters on the top of the stack in the reverse order
add $8, %esp # pop the above two parameters from the stack (the esp register keeps track of the stack top, 8=2*4 bytes popped as param was 4 bytes)
pushl n
pushl $format
call _printf
add $8, %esp
ret
Can someone tell me what is the problem here? Thanks!