用减法递增计数器

时间:2019-01-30 03:25:03

标签: assembly x86 irvine32

我目前正在研究一种汇编语言程序,该程序需要我对数组中的值求和并找到平均值。我已经成功地使用循环找到了总和,但是求平均值的关键是不能使用除法指令。因此,我的逻辑是从总和中减去数组的大小,直到达到负数为止。完成的次数是一个计数器,应该是我的平均值。

我在语法上苦苦挣扎。在第二个循环中,我想进行减法运算,并在每次执行此操作时更新计数器,直到达到负数为止。

到目前为止,这是我的程序:

Include Irvine32.inc
.data
    intarray dword 100, -30, 25, 14, 35, -92, 82, 134, 193,
    99, -24, 1, -5, 30, 35, 81, 94, 143

.code
main PROC
    mov EDI,OFFSET intarray     ; EDI = address of intarray
    mov ECX,LENGTHOF intarray   ; initialize loop counter/ to know the number of elements in the array
    mov EAX,0                   ; sum = 0
L1:                             ; this first loop L1 gets the sum of values in the array.
    add EAX,[EDI]               ; add an integer
    add EDI,TYPE intarray       ; point to the next element
    loop L1                     ; loop through until ECX = 0
L2:                             ; this second loop L2 will compute the average.
    ; My logic to this loop is to subtract the size from the sum 
    ; continuously until it becomes a negative number.
    ; the count of how many times this is done will be the average.
    mov ECX,0                   ; loop counter
    add EBX,EAX
    sub EBX,LENGTHOF intarray
    loop L2
    call dumpregs

INVOKE ExitProcess,0
main ENDP
END main

非常感谢您提供任何提示和建议来帮助我解决此问题。

0 个答案:

没有答案