Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > что за проверка на i386


Автор: null56 22.6.2012, 13:04
Всем привет

Встретил непонятный для себя фрагмент кода, поэтому решил обратиться.... Даже не фрагмент, а его назначение

Код

    asm("pushf; "
    "orl $(1<<18), (%esp); "
    "popf;");


Цель - изменить регистр флагов, но ЗАЧЕМ? Что мне это даст и как это связано с архитектурой?
Связано это как - то с выравниванием, но не могу понять как, при чем прием довольно распространенный
http://stackoverflow.com/questions/548164/mis-aligned-pointers-on-x86

Заранее благодарен за помощь

Добавлено через 13 минут и 36 секунд
кажется разобрался... идет включение проверки выравнивания
то есть если что - то не выровнено, то падает ексепшн?

Автор: null56 22.6.2012, 13:20
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80_%D1%84%D0%BB%D0%B0%D0%B3%D0%BE%D0%B2

Автор: Mikl_ 4.10.2012, 06:13
null56, 
идет проверка 17-ого если считать с нулевого флага VM    (Virtual-8086 Mode    -- Режим виртуального процессора 8086), если он установлен, то мы не в реальном DOS-режиме, а в виртуальном, который процессор 80286 не поддерживал
Хотя смысл может быть и другим -- на 286 регистр FLAGS был 16-разрядным, если есть возможность воздействовать на 17 бит и выше -- значит машина 32-разрядная (386, 486, пеньки) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)