嗨我已經寫了一個函數,通過它的索引清除數組並生成彙編代碼。我需要一些關於這個彙編代碼的解釋
_TEXT SEGMENT
_i$ = -8 ; size = 4
_arr$ = 8 ; size = 4
_size$ = 12 ; size = 4
[email protected]@[email protected] PROC ; clear_arr, COMDAT
; 3 : void clear_arr(int arr[], int size){
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
; 4 : int i;
; 5 : for(i = 0; i < size; i++){
mov DWORD PTR _i$[ebp], 0
jmp SHORT [email protected]_arr
[email protected]_arr:
mov eax, DWORD PTR _i$[ebp]
add eax, 1
mov DWORD PTR _i$[ebp], eax
[email protected]_arr:
mov eax, DWORD PTR _i$[ebp]
cmp eax, DWORD PTR _size$[ebp]
jge SHORT [email protected]_arr
; 6 : arr[i]=0;
mov eax, DWORD PTR _i$[ebp]
mov ecx, DWORD PTR _arr$[ebp]
mov DWORD PTR [ecx+eax*4], 0
; 7 : }
jmp SHORT [email protected]_arr
[email protected]_arr:
; 8 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
[email protected]@[email protected] ENDP ; clear_arr
_TEXT ENDS
END
我需要一些關於循環部分的解釋。我想知道的另一件事是關於DWORD PTR和方括號行[ebp]中的寄存器。如果一個寄存器放在一個方括號內,它是否表示該寄存器的地址?謝謝。
因此mov ecx,DWORD PTR _arr $ [ebp]表示將DWORD PTR _arr $ [ebp]中的值移入寄存器ecx中你能解釋一下美元符號的含義嗎?恩。 DWORD PTR _i $ [ebp]謝謝 – eChung00
@ eChung00更新了我的答案,並附上了一段關於此問題的答案。 – us2012
現在它變得越來越清晰......我很抱歉打擾你,但還有一個問題..爲什麼8?數組類型是int ..我知道它是每個4字節..然後你說ebp + 8保存地址&arr [0],那麼ebp + 16保存地址&arr [1]等等。爲什麼是它8?謝謝 – eChung00