Использование операторов в блоках __asm

Только для систем Microsoft

__asm не может использовать операторы c# или C++, определенные как << оператор.Однако операторы общие c# и MASM, например оператор *, интерпретируется как операторы языка ассемблера.Например, out __asm блок, скобкы (квадратные []) интерпретировать как наиболее узкую нижние индексы массива, в c# автоматически масштабируется в соответствии с размером элемента в массиве.In __asm блок они видны как оператор индекса MASM, который создает смещение байтов (немасштабированное) из любого объекта данных или меткам (а не только массива).Следующий код иллюстрирует различие:

int array[10];

__asm mov array[6], bx ;  Store BX at array+6 (not scaled)

array[6] = 0;         /* Store 0 at array+24 (scaled) */

Первая ссылка на array не масштабируется, но второй.Обратите внимание, что можно использовать Тип оператор для достижения масштабирования на основе константы.Например, следующие выписки эквивалентны:

__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

array[6] = 0;                   /* Store 0 at array + 24 */

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

Использование c или C++ в блоках __asm