gpt4 book ai didi

c++ - C++ 中的内联 asm 与 __asm

转载 作者:太空狗 更新时间:2023-10-29 23:31:20 25 4
gpt4 key购买 nike

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 block 中获取我的 chay 数组的地址。当我尝试使用“&”时,例如&name 我在编译时遇到错误:

error C2400: inline assembler syntax error in 'second operand'; found 'AND'

更新:

mov esi, name 给我这个编译错误:C2443: 操作数大小冲突

更新 2:lea 工作正常。

最佳答案

您似乎在寻找 lea 指令,它将某个符号的有效地址加载到寄存器中。下面的指令将name的地址存入esi

lea esi, name

关于c++ - C++ 中的内联 asm 与 __asm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com