【问题标题】:Passing array as a parameter to an external ASM (Assembly) x86 and accessing it将数组作为参数传递给外部 ASM (Assembly) x86 并访问它
【发布时间】:2015-11-03 05:42:44
【问题描述】:

由于没有太多关于混合 C++ 和汇编的信息,我想澄清一下我在汇编中遇到的一些问题。

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

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

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

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

    swap(str1,SIZE);

    return 0;
}

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

_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 代码是在访问数组的类中显示的。此时,如果我在 ebx 寄存器中加 4,指针是否会迭代到下一个索引?

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

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

【问题讨论】:

    标签: c++ arrays assembly swap


    【解决方案1】:

    此时,如果我将 4 添加到 ebx 寄存器,指针是否会迭代到下一个索引?

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

    由于指针是指向char的指针,你应该在ebx上加1,使其指向下一个元素。

    【讨论】:

    • 非常感谢您的澄清!我会在回家测试时尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多