TransWikia.com

Недопустимый тип операнда

Stack Overflow на русском Asked by digital-mag on November 5, 2021

Мне нужно взять в переменную в ассемблерной вставке значение по адресу, содержащемуся в регистре [EBP]:

size_t esp_val = 0;
size_t esp_var = 0;
size_t ecx_var = 0;
__asm {
    mov esp_var, ESP
    mov ecx_var, ECX
    mov esp_val, [EBP]
}

Но в последней строке mov esp_val, [EBP] я неизменно получаю ошибку

Недопустимый тип операнда

Пробовал менять тип на DWORD. В сети встречал вариант в таком духе:

mov esp_val, SIZE_T PTR[EBP]

mov esp_val, DWORD PTR[EBP]

При чем такое впечатление, что у всех это работает кроме меня.

Я что-то упускаю?

One Answer

Насколько я помню ассемблер, вы пытаетесь сделать пересылку память-память непосредственно, а такой команды нет.

Перебрасывайте в регистр, а регистр - в переменную - типа:

__asm {
    mov esp_var, ESP
    mov ecx_var, ECX
    mov eax, [EBP]
    mov esp_val, eax
}

Answered by Harry on November 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP