访问程序集x86中的数组元素

时间:2014-11-12 04:07:08

标签: assembly

我遇到了分配代码的问题。它是一个函数,用于计算数组中的数字以获得平均值。它传递给下面的函数。我只是从数组中获取实际值时遇到了麻烦,并且在尝试查找有关汇编中数组使用情况的信息时非常糟糕。看起来我只是获取参考/地址数据。帮助????

**下面的一些代码来自我在课堂上的笔记,其余的是我试图填补空白。跟随它可能很糟糕,所以提前抱歉。

.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

1 个答案:

答案 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 关注可能很糟糕不要那么想。这是我在这个论坛上看到的更好的代码之一。