如何在寄存器中存储 asm 中数组元素的地址?

How to store in a register the address of an element of an array in asm?

#include <stdio.h> 
void main()

{
//Variables

char string[] = "This is a string";

_asm {
    XOR EAX, EAX
    XOR EBX, EBX
    XOR ECX, ECX

    MOV EAX, [string]

}   

我想做的是将字符串的第一个元素的内存地址存储在 EAX 中,但我得到“操作数大小冲突”。我猜取消引用的语法是错误的,因为 eax 和内存地址都应该是 32 位,但我在堆栈溢出时找不到任何关于它的信息

这是在 visual studio 上用 C

中的 _asm 完成的

MOV EAX, [string] 不起作用,因为 char 是 8 位而 eax 是 32 位寄存器,只需使用 LEA 加载有效地址:

LEA EAX, [string]

注意:LEA 所做的是将 var 转换为偏移量,因此编译器会这样看:LEA MOV, [offset point to address]