MASM을 사용하여 palindrome을 확인하는 방법에 대해 고민하고 있습니다.배열을 이용한 Palindrome 검사
#include <iostream>
#include <cstring>
#include<string>
#include <algorithm>
using namespace std;
extern "C"
char test(char*, int);
int main()
{
char arr[] = {NULL};
cout << "Enter a string: " << endl;
cin >> arr;
int name = strlen(arr);
test(arr, name);
if (name == 1)
{
cout << "It is a palindrome! " << endl;
}
else
cout << "Not a palindrome. " << endl;
return 0;
}
사용자에게 문자열을 물어보고 배열에 삽입했습니다. 어셈블리 파일로 보내면 true이면 '1'을 반환하고 false이면 '0'을 반환합니다.
.686
.model flat
.code
_test PROC ;named _test because C automatically prepends an underscode, it is needed to interoperate
push ebp
mov ebp,esp ;stack pointer to ebp
mov eax,[ebp+8]
mov ecx,[ebp+12]
mov ebp,0
mov edi,0
mov edx,0
loopMe:
cmp ebp,ecx
je True
mov al,[eax+edi]
mov bl,[edx+esi]
cmp al,bl ;compare
jne false ;if not equal then jump to false
inc edi
dec esi
jmp loopMe
True:
mov eax,1
jmp allDone
False:
mov eax,0
jmp allDone
allDone:
pop ebp
ret
_test ENDP
END
나는 항상 내가 디버거를 확인하고 항상 값이 동일하더라도 거짓 라벨로 점프 할 0을 반환 보이는 문자열을 입력
. 어떤 도움을 주셔서 감사합니다.
_'cin >> arr;'_ 정의되지 않은 동작입니다. –
C++로 코드를 작성한 다음 [this] (https://gcc.godbolt.org/)와 같은 것을 사용하여 어셈블리 코드의 모양을 결정하십시오. 생성 된 어셈블리가 올바른지, C++ 프로그램이 올바른지 알고 있습니다. 그런 다음 필요한 경우 생성 된 어셈블리 코드를 조정하십시오. – PaulMcKenzie