簡體   English   中英

將數組作為參數傳遞給外部ASM(Assembly)x86並對其進行訪問

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

由於在混合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字節應將其移至下一個索引,對嗎?

由於我仍在學習,這對我來說是很新的,對於任何語法錯誤,我深表歉意。 我相信我只是想獲得更多的說明,而不是答案。

此時,如果我在ebx寄存器中加4,指針是否會迭代到下一個索引?

您的swap聲明為extern"C" int swap(char*, int);

由於該指針是指向char的指針,因此應在ebx加1以使其指向下一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM