Базовый указатель и указатель стека

Учитывая этот фрагмент кода:

       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 указывает на первый параметр?

34
задан Cody Gray 30 December 2016 в 07:22
поделиться