首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vs __asm中c++中的内联asm

vs __asm中c++中的内联asm
EN

Stack Overflow用户
提问于 2011-05-18 20:06:29
回答 4查看 3.6K关注 0票数 2
代码语言:javascript
复制
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数组的地址。当我尝试使用"&“例如&name时,我在编译时遇到错误:

代码语言:javascript
复制
error C2400: inline assembler syntax error in 'second operand'; found 'AND'

更新:

mov esi,name显示此编译错误: C2443:操作数大小冲突

更新2: lea工作得很好。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-18 20:32:48

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

代码语言:javascript
复制
lea esi, name
票数 7
EN

Stack Overflow用户

发布于 2011-05-18 20:09:05

name已经是(或者更确切地说是衰减为)一个指针。只需使用mov esi, name即可。

票数 4
EN

Stack Overflow用户

发布于 2011-05-18 20:32:57

代码语言:javascript
复制
move esi, name

已经是名字的地址。如果您想要内容(名称),您可以使用

代码语言:javascript
复制
move esi, [name]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6044392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档