我在学校的作业是循环遍历字符串中的一系列字符,并交换它们,使最终结果与原始字符串相反。
我写了3个汇编函数和一个cpp函数,但是在下面的函数上,当我试图运行程序时,我得到了一些错误,我不知道如何修复它。我将在下面的cpp代码和汇编代码中指出错误,如果有人能指出我的错误,我将非常感激!
我的c++代码如下
#include<iostream>
#include <string>
using namespace std;
extern"C"
char reverse(char*, int);
int main()
{
char str[64] = {NULL};
int lenght;
cout << " Please Enter the text you want to reverse:";
cin >> str;
lenght = strlen(str);
reverse(str, lenght);
cout << " the reversed of the input is: " << str << endl;
}
下面是我的汇编代码
.model flat
.code
_reverse PROC ;named _test because C automatically prepends an underscode, it is needed to interoperate
push ebp
mov ebp,esp ;stack pointer to ebp
mov ebx,[ebp+8] ; address of first array element
mov ecx,[ebp+12] ; the number of elemets in array
mov eax,ebx
mov ebp,0 ;move 0 to base pointer
mov edx,0 ; set data register to 0
mov edi,0
Setup:
mov esi , ecx
shr ecx,1
add ecx,edx
dec esi
reverse:
cmp ebp , ecx
je allDone
mov edx, eax
add eax , edi
add edx , esi
LoopMe:
mov bl, [edx]
mov bh, [eax]
mov [edx],bh
mov [eax],bl
inc edi
dec esi
cmp edi, esi
je allDone
inc ebp
jmp reverse
allDone:
pop ebp ; pop ebp out of stack
ret ; retunr the value of eax
_reverse ENDP
END
在接近开头的一行(显示为push ebp
)上,我收到一个错误消息:
无效指令操作数
最后它显示pop ebp
,我得到一个错误,它显示了同样的内容。
不确定这是否很大,但我也得到了一个语法错误的第一行代码读取.model flat
。
1条答案
按热度按时间nxowjjhe1#
根据重现的症状,我将问题诊断为:这是一个32位x86程序集(很明显),但它被视为x64程序集,这不起作用。
.model
指令对于x64无效,因此存在语法错误。如果这是在Visual Studio的项目中,请将整个方案或这个个别项目的“平台”设定为x86/win32(它在不同的地方有不同的名称,但请将它设定为32比特)。