【发布时间】:2013-11-21 20:01:51
【问题描述】:
我正在编写一个需要内联汇编代码来反转字符串的 c++ 代码。 因此,如果我的输入是:“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 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。
我做错了什么?
【问题讨论】:
-
我假设这是一项学术作业(因为在内联汇编中没有合理的理由这样做),因此考虑到这一点,也没有理由使用堆栈。您可以在一个循环中完成并交换字符。
-
是的,我刚刚弄清楚了交换部分。它有效。我只是想尝试实现堆栈。
标签: c++ assembly x86 inline-assembly