从数组加载值而不使用其地址

时间:2016-10-14 17:55:52

标签: 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成为数组中的第一个数字,但我不希望它在2行代码中(显然,如果有另一种方式,它会更好。) 我不是ASM的业余爱好者,但我大部分都忘记了,我需要点心。有没有办法在一行代码中执行此操作?谢谢!

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

1 个答案:

答案 0 :(得分:1)

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

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已经指向其第一个值。