working on inputing floating point values into an array, then adding them up and getting a sum
so far i have this code for it, but my flag that checks to see if an input is 0 to exit the loop for entering floats, keeps on going(endless loop)
so far I can read an input and output it immediately, but dont know how to store into array
%include "asm_io.asm"
segment .bss
array1 resd 20
segment .data
done db "That was ridiculously incredible! Bye!", 0
segment .text
extern puts, _printf, scanf, dump_line, stack_dump, geomean
global asm_main
asm_main:
enter 0,0
pusha
;Declare Array:
push 5
push 0
push array1
call read_sarray32
;call getfloat
;call putfloat
xor ebx, ebx
mov eax, 1
int 80h
mov eax, done
call print_string
popa
leave
ret
;beginning of get float
;*******************************getFLoat:*****************************
segment .bss
;
segment .data
fmt1 db "%lf", 0
enterNumber db "Enter Your Float Number: ", 0
segment .text
getfloat:
push ebp
mov eax, enterNumber
call print_string
mov ebp, esp
sub esp, 8
lea eax, [ebp-8]
push eax
push fmt1
call scanf
add esp, 8
fld qword [ebp -8]
mov esp, ebp
pop ebp
ret
;Beginning of putfloat
;************************putfloat:*****************************************
segment .bss
;
segment .data
fmt2 db 10, "The number is: %f", 10, 10
segment .text
putfloat:
push ebp
mov ebp, esp
sub esp, 8
fst qword [ebp - 8]
push fmt2
call printf
add esp, 12
mov esp, ebp
pop ebp
ret
;*********************READ array*************************************************
segment .bss
;
segment .data
prompt2 db "Do you have more inputs? (-1 = yes,0 = no)?: ", 0
segm开发者_JAVA百科ent .text
read_sarray32:
pusha
mov ebx, [esp+36] ;move starting position into ebx
mov edx, [esp+40] ;move max size into edx
mov ecx, 0
read_loop:
;mov eax, prompt2
;call print_string
;call read_int
call getfloat
inc ecx; increment counter
call print_nl
call putfloat
call print_nl
cmp eax, 0
jz Done
jmp continue_loop
continue_loop:
mov [ebx], eax ;move value into memory slot ebx
add ebx, 4 ;move to next location for db word
cmp ecx, edx ; did i reach maximum values of array size?
jz Done
jmp read_loop
Done:
call putfloat
sub ecx, 1 ;to offset the 0 that was entered to exit loop
mov [esp+44], ecx ;moves counter back to stack
popa
ret
I'm not sure exactly what your question is (hint for getting good answers: always make it clear what question you're asking) but ...
You appear to be expecting your floating-point number to be in
eax
. Why would it be there? That's an integer register. Yourgetfloat
routine puts the number it's read onto the floating-point stack.It's hard to tell what might have been wrong with your code for terminating the loop when 0 is entered in response to
prompt2
since that code is no longer there :-).Obviously this isn't your problem, but you have
jmp continue_loop
immediately followed by thecontinue_loop
label. Is this left over from an earlier version of the code?I think the stack offsets from which you're loading
ebx
andedx
near the start ofread_sarray32
are wrong; have you forgotten thatcall
pushes the return address onto the stack? Specifically, I think that you're gettingebx
= random nonsense andedx
= 0; since your code is doing the equivalent of a do...while loop it'll run for ever -- or at least for 2^32 iterations.
精彩评论