我在这里学到了很多东西,但是我终于陷入困境,似乎找不到答案。我正在尝试为类编写一个简单的程序,该程序接受用户输入,将这些数字放入数组中,将这些数字和数组长度传递给汇编函数,然后反转这些数字并将其传递回c函数进行输出。我在弄清楚堆栈上数组的地址或获取edi寄存器中最后一个元素的地址时遇到问题。这是我到目前为止的代码,请原谅质量不佳的代码。我是新来的。
这是在Visual Studio生产线组装中,因为代码块和Eclipse在加载时会不断崩溃,因此我必须完成此项目。 Visual Studio使用AT&T格式。
// String_reverse.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
unsigned int input [8];
int length;
int string_reverse( int length, unsigned int input [])
{
_asm push ebp;
_asm mov esp, ebp;
_asm lea edi, [esi+ecx*4-4];
_asm cmp esi, edi;
_asm jnb L_done;
_asm L_repeat:
_asm mov eax, [esi];
_asm mov ebx, [edi];
_asm mov [edi], eax;
_asm mov [esi], ebx;
_asm add esi, 4;
_asm sub edi, 4;
_asm cmp esi, edi;
_asm jb L_repeat;
_asm L_done:
_asm mov esp, ebp;
_asm pop ebp;
_asm ret;
}
int main()
{
printf("Enter the number series you would like reversed... input -1 to
exit\n");
scanf_s ("%u", input);
string_reverse(sizeof(input)/sizeof(*input), input);
printf("Your reversed number series:\n%u", input);
getchar();
getchar();
return 0;
}