Я работаю над кодом С++, который должен иметь встроенный код сборки для изменения строки. Итак, если мой ввод: «qwerasd», вывод должен быть «dsarewq». Я думал реализовать это с помощью стеков. Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverseString(char* buffer, int len){
__asm {
push ecx
push edi
push eax
mov ecx, len
mov edi, buffer
top:
mov al, BYTE PTR [edi]
push al
inc edi
loop top
mov ecx, len
mov edi, buffer
refill:
pop al
mov BYTE PTR [edi], al
inc edi
loop refill
}
}
int main() {
char s[64];
char *ptr = s;
int size;
printf("\nEnter text: ");
scanf("%s", s);
size = strlen(s);
reverseString(ptr, size);
printf("\nThe new text is: %s\n\n", s);
exit(0);
}
Я пытаюсь поместить символ один за другим в стек, а затем просто выталкиваю их один за другим и сохраняю обратно в строку.
Когда я запускаю код, я получаю следующую ошибку: Ошибка проверки во время выполнения #0 — значение ESP не было должным образом сохранено при вызове функции. Обычно это результат вызова функции, объявленной с одним соглашением о вызовах, с указателем на функцию, объявленным с другим соглашением о вызовах.
Что я делаю неправильно?