我需要在汇编中编辑C ++代码中从用户收到的字符串。我找到了这个教程http://msdn.microsoft.com/en-US/library/y8b57x4b(v=vs.80).aspx,根据它,我的代码应该可以工作
int main ()
{
char* s;
s=new char[80];
cin.getline(s,80);
__asm
{
mov eax, offset s
}
}
但是编译器在mov"不正确的操作数类型"的行上显示错误。有什么问题,我该如何解决?
答案 0 :(得分:0)
char* s
是一个局部变量。它将在调用函数时创建,并在函数返回时“忘记”。在编译时它不存在“偏移”(即绝对存储器地址)。但是你可以内联汇编程序强制加载指针:
#include <iostream>
using namespace std;
int main ()
{
char* s;
s=new char[80];
__asm
{
mov ebx, s ; = mov ebx, [ebp-4]
mov byte ptr [ebx], 'H'
mov byte ptr [ebx+1], 'e'
mov byte ptr [ebx+2], 'l'
mov byte ptr [ebx+3], 'l'
mov byte ptr [ebx+4], 'o'
mov byte ptr [ebx+5], 0 ; Don't forget the terminator!
}
cout << s << endl;
return 0;
}