Visual c++ 从没有地址的数组加载值

Visual c++ 从没有地址的数组加载值,visual-c++,assembly,x86,inline-assembly,Visual C++,Assembly,X86,Inline Assembly,我有以下代码: int arr[] = { 299, 3190, 4892, 256}; __asm { MOV EAX, DWORD PTR[arr] // EAX will be our number. MOV EAX, [EAX] // Setting EAX to where it's pointing. } 我需要EAX作为数组中的第一个数字,但我不希望它出现在两行代码中(显然,如果有其他方法,它会更好) 我不是ASM的业余爱好者,但我大部分时间都

我有以下代码:

int arr[] = { 299, 3190, 4892, 256};
 __asm
{
    MOV EAX, DWORD PTR[arr] // EAX will be our number.
    MOV EAX, [EAX]          // Setting EAX to where it's pointing.
}
我需要EAX作为数组中的第一个数字,但我不希望它出现在两行代码中(显然,如果有其他方法,它会更好) 我不是ASM的业余爱好者,但我大部分时间都忘了,我需要一些点心。有没有一种方法可以在一行代码中实现这一点?谢谢

编辑:
编译器是MASM x86,即Visual Studio中提供的编译器。

只需删除第二行汇编代码:

int arr[] = { 299, 3190, 4892, 256};
 __asm
{
    MOV EAX, DWORD PTR[arr] // ◄■■■ HERE EAX GETS THE FIRST ARRAY VALUE.
    MOV EAX, [EAX]          // ◄■■■ UNNECESSARY!
}

DWORD PTR[arr]
移动到
EAX
中时,实际上是将数组的第一个值移动到
EAX
中。您不需要地址,因为
arr
已经指向它的第一个值。

是的,但不知道如何在内联asm中这样做。您还忘了提到您使用的编译器,但看起来像microsoft。PS:你找到“编辑”链接了吗?:)@杰斯特:哦,是的,谢谢我改变了问题,谢谢!在调试时,当我删除第二行时,它显示:EAX 2686352 unsigned int。但是,对于第二行:EAX 299 unsigned int。2686352是值的地址。奇怪的是,它没有显示给我。您正在使用Visual Studio 2015吗?我的显示的是ADDR,而不是中包含的值it@NoamRodrik,尝试简化行:
MOV-EAX,arr
。这就是你所需要的。哦,我写错了。它起作用了!问题是,如何让它工作:int*pArr=arr;没有第二行?@NoamRodrik,我认为你不能,因为在这个例子中,你有一个指向另一个内存位置的指针。