Использование операторов в блоках __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 */
ЭЛЕМЕНТ, относящийся Майкрософт