将数组作为参数传递给外部 ASM(程序集)x86 并访问它

Passing array as a parameter to an external ASM (Assembly) x86 and accessing it

由于我找不到太多关于混合使用 C++ 和汇编的信息,我想澄清一些我在汇编方面遇到的问题。

我正在做一个项目,我们必须将一个数组传递给一个单独的 .asm 文档才能反转字符串。请看我开始的.cpp文件的代码(不包括下面的header):

extern"C" int swap(char*, int);

int main()
{
    const int SIZE = 20;
    char str1[20] = { '[=10=]' };

    cout << "Please enter a string: ";
    cin >> str1;

    swap(str1,SIZE);

    return 0;
}

从这里开始,我将在我的 .asm 文档中开始以下内容(不包括下面代码中的 header):

_swap PROC
    push ebp
    mov ebp,esp ;stack pointer to ebp

    mov ebx,[ebp+8] ; address of first array element
    mov ecx,[ebp+12]

上面的 asm 代码是 class 中显示的访问数组的代码。此时,如果我在ebx寄存器中加4,指针是否会迭代到下一个索引?

假设我的数组中的第一个索引 (0) 是 'a'。执行 mov ebx,[ebp+8] 是否将 ebx 设置为 'a' 所在的地址?如果是这样,将 ebx 增加 4 个字节应该将其移动到下一个索引,对吗?

因为我还在学习,这对我来说很新,对于任何语法错误,我深表歉意。我相信我只是想得到更多的澄清而不是答案。

At this point, does the pointer iterate to the next index if I add 4 to ebx register?

您对 swap 的声明是 extern"C" int swap(char*, int);

因为指针是指向char的指针,所以应该在ebx上加1使其指向下一个元素。