我有一个程序,我应该计算平均值 为此,我需要将总和除以n 但它们是整数,我希望结果是浮点数 我怎么能用语法
来做让我们说
.data
Sum: .quad 2212
N: .quad 20
现在我应该如何申报平均值并进行计算
.global _start
.data
message: .string "Elements of the list: \n"
message1: .string "Sum of elements in the list= %d \n"
message2: .string "Average of elements in the list= %lf \n"
message3: .string "Key %d is found at location %d in the list\n"
message4: .string "Key occurs %d times in the list \n"
formatd: .string "%ld\n"
buf: .skip 1024
a: .float 5.0
b: .float 2.0
sum: .quad 0
avg: .double 0
key: .quad 32
N: .quad 20
count: .quad 0
list: .quad 12
.quad 23
.quad 32
.quad 84
.quad 121
.quad 34
.quad 23
.quad 32
.quad 93
.quad 22
.quad 56
.quad 32
.quad 949
.quad 123
.quad 99
.quad 23
.quad 32
.quad 289
.quad 99
.quad 34
这是一个数组,我正在遍历它并找到总和和平均值我也在寻找关键
.text
_start:
movq $1, %rax
movq $1, %rdi
movq $message, %rsi
movq $24, %rdx
syscall
xorq %rcx, %rcx
loop:
pushq %rax
pushq %rbx
pushq %rcx
movq $0, %rax
movq $formatd, %rdi
movq $list, %rbx
movq (%rbx,%rcx,8), %rsi
addq %rsi, sum
call printf
popq %rcx
popq %rbx
popq %rax
inc %rcx
cmp $20,%rcx
jl loop
pushq %rax
pushq %rbx
pushq %rcx
movq $0, %rax
movq $message1, %rdi
movq sum, %rsi
call printf
popq %rcx
popq %rbx
popq %rax
到此为止我正在计算总和并显示每个元素
#here i want to find avg
#
pushq %rax
pushq %rbx
pushq %rcx
movq $0, %rax
movq $message2, %rdi
movq avg, %rsi
call printf
popq %rcx
popq %rbx
popq %rax
这里我想找到平均值并显示它
答案 0 :(得分:1)
让我假设你是在长模式下编程。如果您使用的是x87浮点单元,则通用方法如下所示:
fildq sum(%rip) # load sum
fildq N(%rip) # load N
fdivrp # divide sum by N and pop
结果将在%st(0)
。如果N
是32位整数,则可以改为:
fildq sum(%rip) # load sum
fidivl N(%rip) # divide by integer sum
如果您使用的是SSE浮点单元,则代码如下所示:
cvtsi2sdq sum(%rip),%xmm0 # load sum
cvtsi2sdq N(%rip),%xmm1 # load N
divsd %xmm1,%xmm0 # divide sum by N
结果位于xmm0
。