Я работаю над небольшим проектом и пытаюсь получить некоторые жестко заданные значения для встроенной сборки. Для этого я использую шаблоны. Я создал код надрез, чтобы показать, что я вижуСборочные и шаблонные классы
#include <iostream>
template <size_t T>
struct MyClass
{
size_t myValue = T;
void doSomething()
{
size_t value = T;
__asm
{
mov eax, [T]
mov [value], eax
}
std::cout << value << std::endl;
}
};
int main()
{
auto o = new MyClass<999>();
o->doSomething();
return 0;
}
Оказывается, что для кода сборки он пытается использовать сегмент данных вместо «вставить номер прямо туда»
; 25 : {
push ebp
mov ebp, esp
push ecx
; 26 : auto o = new MyClass<999>();
push 4
call [email protected]@Z ; operator new
add esp, 4
; 14 : size_t value = T;
mov DWORD PTR _value$2[ebp], 999 ; 000003e7H
; 26 : auto o = new MyClass<999>();
mov DWORD PTR [eax], 0
mov DWORD PTR [eax], 999 ; 000003e7H
; 15 : __asm
; 16 : {
; 17 : mov eax, [T]
mov eax, DWORD PTR ds:0
; 18 : mov [value], eax
mov DWORD PTR _value$2[ebp], eax
; 19 : }
; 20 : std::cout << value << std::endl;
Я использую Visual Studio 2015. Есть ли другой способ достичь этого.
Заранее благодарна
Tritron.
я не видел шаблон и код сборки смешанный. Смелая душа, вы есть. –
Если 'T' - значение, вы не должны использовать' mov eax, T', а не '[T]'? –
Да, но аналогичный результат, если используется значение. Кажется, он заменяется на 0. ds - это то, что вы измеряете. – tritron