Assembly 在8087 nasm编程中计算平均值?

Assembly 在8087 nasm编程中计算平均值?,assembly,nasm,Assembly,Nasm,我使用下面的代码来计算nasm中的平均值 section .data arr : dq 10000,10000,20000,10000,10000 cnt : dq 5 dec : dq 100000000 section .bss mean rest 1 section .text global _start _start: finit fldz mov rsi,arr mov cl,05 addloop: fadd qword[rsi] add rsi,8 dec cl jnz

我使用下面的代码来计算nasm中的平均值

section .data

arr : dq 10000,10000,20000,10000,10000
cnt : dq 5
dec : dq 100000000


section .bss
mean rest 1

section .text
global _start
_start:

finit
fldz

mov rsi,arr
mov cl,05

addloop:
fadd qword[rsi]
add rsi,8
dec cl
jnz addloop

fld qword[cnt]
fdiv ST1,ST0

fld qword[dec]

fmul ST0,ST2

fbstp [mean]


mov r15,[mean]

exit:
mov rax,60
mov rdi,0
syscall
但当我通过gdb检查r15时,它显示为0。当我在加法循环后检查r15时
(从堆栈中弹出并移动到r15)它仍然显示0。请告诉我我做错了什么。

在nasm中,
dq
可用于存储四字整数或浮点,但格式不同。您已经将
dq
常量表示为整数,汇编程序可能会将其存储为整数。这与将它们存储为浮点不同。试试看,
arr:dq 1.e4,1.e4,2.e4,1.e4,1.e4
,和
cnt:5.0
,和
dec:dq 1.e8
非常感谢。它起作用了