[英]nasm sum of real number array, assembly
這是我以前的帖子的擴展,這是更新的代碼,到目前為止,它將輸出我輸入到數組中的最后一個數字,因此它實際上還不是求和值
;*************************************ADD ARRAY**********************************************
segment .bss
sum resq 1
segment .data
summessage db "The Sum is: ", 0
segment .text
extern readdouble,print_string, read_int, writedouble, print_nl, print_int
global addarray
addarray:
pusha
mov edi, 0 ;initialize counter to 0
mov esi, 0 ;initialize accum to 0
;mov ecx, 0 ;zero out ecx and edx
;mov edx, 0
mov ebx, [ebp] ;moves starting location of array1 into ebx
mov edi, [ebp+12] ;moves array size
add_loop:
mov ecx, [ebx] ;mov higher order
mov edx, [ebx+4] ;mov lower order
push ecx
push edx
fldz
fld qword [esp] ;The second input is now in a floating point register, specifically st0.
pop dword ecx
pop dword edx ;The first input is now on top of the system stack (the stack addressed by bytes)
fadd qword [esp] ;The first input is added to the second input and the sum
;replaces the second input in st0
add ebx,8
inc esi
cmp edi, esi
jz add_done
jmp add_loop
add_done:
call print_nl
mov eax, summessage ;Setup to display a message
call print_string ;Dr. Carter's library
push dword 0 ;Make space on sytem stack for the sum value
push dword 0 ;Ditto
fst qword [esp] ;Copy contents of st0 to space currently on top of the system stack
pop edx ;Copy 4 MSBs to ecx
pop ecx ;Copy 4 LSBs to ecx
call writedouble ;Show the 8-byte value
call print_nl ;Newline
popa
ret
我猜想在循環中fldz
可能至少是您問題的一部分。
您添加數字的循環對我來說有點...奇怪。 我想我會使用更多類似的內容[警告:我主要使用MASM,所以我在這里使用了它的語法...]:
add_array proc
mov esi, [ebp]
mov ecx, [ebp+12] ; I'm assuming these are the right offsets
fldz
add_loop:
fadd qword ptr [esi]
add esi, 8
dec ecx
jnz add_loop
fstp result
ret
add_array endp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.