почитывал я Таненбаума (Современные операционные системы) об операционных системах и наткунлся на такую вот штуку, как tsl и lock (раздел про многопоточность) решил же я потестировать эту инструкцию, но тут выяснилось что компилятор(fasm) не знает такой инструкции... я конечно понимаю, что можно сделать вместо tsl, xchg что будет впринципе почти одно и тоже... из принципа интересно, на каком компиляторе эта инструкция будет работать ?
>>почитывал я Таненбаума (Современные операционные системы) об операционных системах и наткунлся на такую вот штуку, как tsl и lock (раздел про многопоточность) решил же я потестировать эту инструкцию, но тут выяснилось что компилятор(fasm) не знает такой инструкции... я конечно понимаю, что можно сделать вместо tsl, xchg что будет впринципе почти одно и тоже... из принципа интересно, на каком компиляторе эта инструкция будет работать ? - MASM ?)) Или тот же FASM (благо сорцы открытые) добавьте инструкцию tsl с параметрами в define's list
Phantom_84 Там скорее всего речь вообще идёт об абстрактной инструкции с указанным эффектом, а не об инструкции конкретного процессора.
>>Там скорее всего речь вообще идёт об абстрактной инструкции с указанным эффектом, а не об инструкции конкретного процессора. - Ага, только сейчас скачал эту книгу , посмотрел. Так вот единственное что он может сделать добавить tsl инструкцию[мнемокод] с параметрами в дэфайн лист инструкций FASM.
у этой инструкции идея такова: есть мол, некоторая перменная lock если lock принимает значение в 1, то блокируется шина памяти для других процессоров и выполняющийся процесс может работать в своей критической области TSL считывает инструкцию в регистр, и устанавливает значение lock в 1 (тобишь изолируемся от внешнего мира ) далее мы проверяем что было в lock (нас уже никто не прервет, всё заблокировано) если 1, то до нас уже заблокировали... и уходим если 0, то выполняем всё что нужно и возвращаем назад переменной lock значение 0 примерный код: Код (Text): enter_region: TSL REGISTER, LOCK ; копирование LOCK в регистр с присвоением в 1 CMP REGISTER, 0 JNE enter_region ; some code... RET leave_region: ; выход из критической области MOV LOCK, 0 RET