char name[25];
int generated_int;
for(int i = 0; i<sizeof(name); i++)
{
name[i] = (char)0;
}
cout << "Name: ";
cin >> name;
int nameLen = strlen(name);
__asm
{
pusha;
mov esi, &name //I got error here, I cant use "&". How to move name address to esi?
mov ecx, nameLen
mov ebx, 45
start:
mov al, [esi]
and eax, 0xFF
mul ebx
inc esi
add edi, eax
inc ebx
dec ecx
jnz start
mov generated_serial, edi
popa
}
cout << endl << "Serial: " << generated_serial << endl << endl;
我不知道如何在asm块中获取我的chay数组的地址。 当我尝试使用“&amp;”时例如&amp; name我在编译时遇到错误:
error C2400: inline assembler syntax error in 'second operand'; found 'AND'
更新:
mov esi,name给我这个编译错误:C2443:操作数大小冲突
更新2: lea工作正常。
答案 0 :(得分:7)
您似乎正在寻找lea
指令,该指令将某些符号的有效地址加载到寄存器中。以下说明会将name
的地址存储在esi
。
lea esi, name
答案 1 :(得分:4)
name
已经(或者更确切地说是衰变)指针。只需使用mov esi, name
。
答案 2 :(得分:1)
move esi, name
已经是姓名的地址。如果您想要内容(名称[0]),您将使用
move esi, [name]
答案 3 :(得分:1)
lea
正在寻找:
#include <stdio.h>
int main()
{
char name[25];
char* fmt = "%p\n";
__asm {
lea eax,name
push eax
mov eax,fmt
push fmt
call printf
}
return 0;
}