註釋上面說:從內存ADRESS A. N個數的計算的代碼只是爲了教育目的...彙編:瞭解如何計算代碼的平均
我想明白是怎麼一個平均值的計算工作在彙編程序中。守則評論由我撰寫。如果我理解錯誤,請將其添加到您的答案中。我不瞭解的部分尤其是ADD EBX,4
。
該代碼的目的是獲得內存地址A
中所有數字的平均值。請仔細閱讀評論。
MOV ECX, [N] ;Loading count of numbers in ECX
JZ done ; If the count of numbers is 0 go to done
MOV EBX, [A] ; Load all the numbers which are in memory space [A] in EBX
MOV EAX,0 ; EAX will be the result
Loop: ADD EAX, [EBX] ;Add first number of EBX to EAX?
ADD EBX, 4 ;What is this doing and how does it work, why would you add the number 4?
DEC ECX ;Numbers to add - 1
JNZ Loop ;Jump if not zero, and repeat the loop
DIV [N] ;Divide the result of the calculation
Done: ;value of average in EAX
這些問題在代碼註釋中。 向我提供什麼[A]
和[N]
是什麼以及它們是如何工作的,特別是ADD EBX,4
正在做什麼?謝謝。
8086/8088沒有像_ECX_這樣的32位寄存器, _EBX _,_ EAX_。這些16位處理器支持16位版本_CX_,_AX_,_BX_(以及高/低字節部分)。 –
假設這實際上是386代碼,那麼'ADD EBX,4'將遍歷一個DWORD數組(32位值)。一個DWORD是32位寬(4字節)。因此,要從一個DWORD轉到下一個,每次迭代時必須在_EBX_中將地址添加到4。 'ADD EAX,[EBX]'在_EBX_指向的內存地址處獲取DWORD值並將其添加到_EAX_中的值,將添加的結果存儲在_EAX_ –
@MichaelPetch中需要了解的內容,該代碼僅供教育目的。我不知道它在哪個處理器上工作,即使它在一個類處理器上工作:( –