как положить значение переменной в регистр ebp, в ассемблерной вставке
есть вот ассемблерная вставка
int offset = 4;
__asm__ __volatile__(
"pushl %%ebp\n\t"
"int $0x40\n\t"
"popl %%ebp"
::
"a"(45),
"b"(40), // Здесь передаются еще какие то значения, но это неважно
"c"(4),
"d"(5),
"S"(9),
"D"(0)
);
так вот, прерыванию нужно передать аргумент через регистр ebp (а именно переменную offset). И чет почитав разных источников я так и не понял, а сделать это надо.
то есть на ассемблере этот код должен выглядеть как то так(offset передаётся откуда то свыше):
mov 45, eax
mov 40, ebx,
mov 4, ecx
mov 5, edx,
mov 9, esi
mov 0, edi
pushl ebp
mov offset, ebp
int 40h
popl ebp
писать отдельно на assэмблере не мой вариант
Ответы (1 шт):
Автор решения: Egor00f
→ Ссылка
это можно сделать так:
int offset = 4;
__asm__ __volatile__(
"pushl %%ebp\n\t"
"mov %0, %%ebp\n\t"
"int $0x40\n\t"
"popl %%ebp"
::
"X"(offset),
"a"(45),
"b"(40), // Здесь передаются еще какие то значения, но это неважно
"c"(4),
"d"(5),
"S"(9),
"D"(0)
);
X значит что без разницы от куда переменная, из памяти или регистров
Должно работать, наверно, я надеюсь...