Мне нужна помощь с кодом в ассемблере.
Я работаю над этим, и моя группа только что сделала этот ассемблерный код, где она должна была сделать то же самое, что я делал в # c.
Может ли кто-нибудь помочь мне понять, что происходит с де-стэк хотя бы на первых шагах, чтобы я мог продолжить и завершить остальное?
Я новичок в ассемблере, но я знаю, что эти строки просто сохраняют значение для вызывающей функции, берут кадр для вызываемой функции и сохраняют место для локальных переменных, но я не могу выяснить следующую первую шаги.
mov ebp
mov ebp,esp
sub esp, 16
Вот что я сделал в #c:
void mult_integer(int X[A_Linhas][A_Colunas], int number)
{
int c, l;
for (l = 0; l < A_Linhas; l++)
{
for (c = 0; c < A_Colunas; c++)
{
X[l][c] = number * X[l][c];
}
}
}
А вот код в сборке:
mul_integer:
push ebp
mov ebp, esp
sub esp, 16
mov dword [ebp-4H], 0
jmp L_020
L_017: mov dword [ebp-8H], 0
jmp L_019
L_018: mov edx, dword [ebp-4H]
mov eax, edx
add eax, eax
add eax, edx
shl eax, 2
mov edx, eax
mov eax, dword [ebp+8H]
lea ecx, [edx+eax]
mov edx, dword [ebp-4H]
mov eax, edx
add eax, eax
add eax, edx
shl eax, 2
mov edx, eax
mov eax, dword [ebp+8H]
add edx, eax
mov eax, dword [ebp-8H]
mov eax, dword [edx+eax*4]
imul eax, dword [ebp+0CH]
mov edx, eax
mov eax, dword [ebp-8H]
mov dword [ecx+eax*4], edx
add dword [ebp-8H], 1
L_019: cmp dword [ebp-8H], 2
jle L_018
add dword [ebp-4H], 1
L_020: cmp dword [ebp-4H], 3
jle L_017
nop
leave
ret