Với đoạn mã này:cơ sở con trỏ và con trỏ ngăn xếp
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
(Đây chỉ là phương pháp Trước đây chúng ta đẩy đầu tiên và tham số thứ hai trên stack..)
Câu hỏi của tôi là: tại sao chúng ta thêm 8 vào Base Pointer để đến địa chỉ của tham số đầu tiên và sau đó là 12?
Tôi nhận được thực tế là chúng là dword để mỗi người trong số họ là 4 byte .. do đó từ ebp + 8 đến ebp + 12 nó tạo ra cảm giác để thực hiện. Nhưng tại sao cái đầu tiên là ebp + 8? Bởi vì nếu ESP trỏ đến TOP của stack, mov ebp, esp có nghĩa là EBP trỏ tới TOP của stack. Sau đó, chúng tôi đẩy 4 giá trị trên ngăn xếp: eax, ebx, ecx và edx. Tại sao EBP + 8 chỉ vào tham số đầu tiên?
+1 - Đơn giản, sạch sẽ và mang tính thông tin. – Cyclonecode
Wow khá sạch sẽ! Cảm ơn điều này rất hữu ích! Tôi đoán điểm chính là Stack phát triển xuống! Tốt để biết! Bạn đã làm cho ngày của tôi. – yhcowboy