我遇到了分配代码的问题。它是一个函数,用于计算数组中的数字以获得平均值。它传递给下面的函数。我只是从数组中获取实际值时遇到了麻烦,并且在尝试查找有关汇编中数组使用情况的信息时非常糟糕。看起来我只是获取参考/地址数据。帮助????
**下面的一些代码来自我在课堂上的笔记,其余的是我试图填补空白。跟随它可能很糟糕,所以提前抱歉。
.586
.MODEL FLAT, C
.STACK
.DATA
.CODE
AverageFunc PROC
NoOfElemenstsDW EQU 08 ArrayAddrStartPtr EQU 12
push ebp
mov ebp, esp
push edi
push ecx
mov ecx, [ebp + NoOfElemenstsDW ]
mov edi, [ebp + ArrayAddrStartPtr]
sub ebx, ebx ;set ebx to 0
sub eax, eax ;set eax to 0
sub edx, edx ;must set to 0 to get accurate division
L1:
add eax, [edi] ;add value to total
inc edi ;go to next point in the array
add ebx, 1 ;add 1 to the counter
cmp ebx, ecx ;compare ecx and ebx
jl L1 ;If ebx < ecx, loop again
div ecx ;divide sum by total numbers
pop ecx
pop edi
pop ebp
ret
AverageFunc ENDP
END
答案 0 :(得分:0)
如果您的AverageFunc应该仅返回EAX,那么您仍然必须推送并弹出EDX。
这两个人不在一起
add eax, [edi] ;add value to total
inc edi ;go to next point in the array
由于EDI指向双字,因此需要将EDI提高4而不是1。
此外,补充很快就会溢出。用
解决它add eax,[edi]
adc edx,0
作为预防措施,在L1标签之前放置一个合适的jecxz
。
ps 关注可能很糟糕不要那么想。这是我在这个论坛上看到的更好的代码之一。