从 masm proc 中的 C++ 函数调用中检索参数 5 和 6

问题描述 投票:0回答:1

鉴于:

#include <iostream>

extern "C" int AddAsm(int a, int b, int c, int d, int e, int f);

int main()
{
    std::cout << AddAsm(1, 2, 3, 4, 5, 6);
}

我想在 x64 masm 中实现 AddAsm 函数,如下所示:

.code
    AddAsm proc
        mov rax, 0
        add rax, rcx
        add rax, rdx
        add rax, r8
        add rax, r9

        add rax, qword ptr [rsp + 32]
        add rax, qword ptr [rsp + 40]
        add rax, qword ptr [rsp + 48]
        add rax, qword ptr [rsp + 56]
        ret
    AddAsm endp
end

现在前 4 个参数的一切都清楚了,但我无法理解/找到关于如何将其余参数放入堆栈的实际示例,

rbp
rsp
寄存器值实际上是什么表示从一个参数到另一个参数的偏移量是多少。

有人可以举个例子来说明一下吗?

c++ assembly 64-bit masm
1个回答
0
投票
.code
    AddAsm proc
        mov eax, 0
        add eax, ecx ; a
        add eax, edx ; b
        add eax, r8d ; c
        add eax, r9d ; d
        add eax, dword ptr [rsp + 40] ; e
        add eax, dword ptr [rsp + 48] ; f
        ret
    AddAsm endp
end
© www.soinside.com 2019 - 2024. All rights reserved.