将数组作为参数传递给外部 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使其指向下一个元素。
由于我找不到太多关于混合使用 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使其指向下一个元素。