2017-02-01 17 views
0

Я знаю, что блок __asm может получить доступ к переменным, объявленным за пределами этих блоков, но я хочу найти способ доступа к переменной, объявленной в блоке снаружи такого блока. Все мои знания о C и C++ указывают на то, что это должно быть невозможно из-за того, что C и C++ скрывают что-либо в пределах {} блоков. Есть ли способ сделать это, или мне нужно объявлять такие переменные за пределами блока __asm?Могу ли я получить доступ к переменным __asm ​​извне блока __asm?

PS: Я не смог найти подходящий ответ на этот вопрос из любого из моих поисков.

+0

Я думаю, мы предполагаем, что вы используете MS Visual C++? –

+0

Да, но не встроенная сборка доступна на других компиляторах? –

+1

Он доступен (но не обязательно) в других компиляторах, но не всегда предлагается таким образом, который совместим с MSVC++. Например, в GCC существуют шаблоны ассемблерного языка, которые работают совсем не так, как в MSVC++. –

ответ

1

Ответ, кажется, нет

Microsoft Specific

Хотя __asm ​​блок может ссылаться на типы и объекты данных C или C++, он не может определить объекты данных директив MASM или операторами. В частности, вы не можете использовать директивы определения DB, DW, DD, DQ, DT и DF или операторы DUP или THIS. Структуры MASM и записи также недоступны. Встроенный ассемблер не принимает директивы STRUC, RECORD, WIDTH или MASK.

END Microsoft Specific

Отсюда https://msdn.microsoft.com/en-us/library/h70hd396.aspx

+0

Вот чего я боялся. Но спасибо. –