Учитывая этот кусок кода:Базовый указатель и указатель стека
swap:
push ebp ; back up the base pointer,
mov ebp, esp
; push the context of the registers on the stack
push eax
push ebx
push ecx
push edx
mov eax, [ebp+8] ; address of the first parameter
mov ebx, [ebp+12] ; address of the second parameter
mov dl, [eax]
mov cl, [ebx]
mov [eax], cl
mov [ebx], dl
; restore the context of the registers from the stack
pop edx
pop ecx
pop ebx
pop eax
; restore the ebp
pop ebp
ret
(Это просто метод Ранее мы протолкнул первый и второй параметр в стеке.).
Мой вопрос: почему мы добавляем 8 к базовому указателю, чтобы перейти к адресу первого параметра, а затем 12?
Я получаю тот факт, что они являются dword, поэтому каждый из них составляет 4 байта. От ebp + 8 до ebp + 12 это делает смысл делать. Но почему первый из них - ebp + 8? Поскольку, если ESP указывает на верхнюю часть стека, mov ebp, esp означает, что EBP указывает на верхнюю часть стека. Затем мы нажимаем 4 значения в стеке: eax, ebx, ecx и edx. Почему EBP + 8 указывает на первый параметр?
+1 - Простой, чистый и информативный. – Cyclonecode
Wow довольно чистый! Спасибо, это было очень полезно! Я предполагаю, что ключевым моментом было то, что Стек стекает вниз! Хорошо знать ! Вы сделали мой день. – yhcowboy