如何在寄存器中存储 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]
#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]