嗨,我编写了一个函数,它通过索引清除数组并生成汇编代码。
_TEXT SEGMENT
_i$ = -8 ; size = 4
_arr$ = 8 ; size = 4
_size$ = 12 ; size = 4
?clear_arr@@YAXQAHH@Z 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 $LN3@clear_arr
$LN2@clear_arr:
mov eax, DWORD PTR _i$[ebp]
add eax, 1
mov DWORD PTR _i$[ebp], eax
$LN3@clear_arr:
mov eax, DWORD PTR _i$[ebp]
cmp eax, DWORD PTR _size$[ebp]
jge SHORT $LN4@clear_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 $LN2@clear_arr
$LN4@clear_arr:
; 8 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
?clear_arr@@YAXQAHH@Z ENDP ; clear_arr
_TEXT ENDS
END
我需要一些关于循环部分的解释。我想知道的另一件事是关于 DWORD PTR 和方括号行 [ebp] 中的寄存器。如果寄存器放在方括号中,它是否代表该寄存器的地址?谢谢。