Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асм.docx
Скачиваний:
16
Добавлен:
27.10.2018
Размер:
644.06 Кб
Скачать

22. Команди операцій з двійковими ланцюжками

В мікропроцесорі i486 введено дві підгрупи ефективних команд для роботи з двійковими ланцюжками (bit string). Ці типи даних широко використовуються в комп’ютерній графіці, для табличного подання секторів дискового простору і т.п.

Команда перевірки біта bt (bit test) вибирає певний біт у двійковому ланцюжку і передає його в прапорець перенесення cf. Подібні до неї команди перевірки та інвертування біта btc (bit test and complement), перевірки й установлення біта в 1 bts (bit test and set), перевірки й установлення біта в нуль btr (bit test and reset). Тому надалі говоритимемо про узагальнену команду

btX dst, index,

де , dst – задає двійковий ланцюжок в оперативній пам’яті або загальному регістрі, index – вибирає конкретний біт у ланцюжку. Припустимі форми

btX reg/mem16, reg16, btX reg/mem16, imm8,

btX reg/mem32, reg32, btX reg/mem32, imm8.

Отже, dst визначає слово або подвійне слово в регістрі або в комірці оперативної пам’яті, а значення index знаходиться в регістрі або задається як безпосередній операнд. Діапазон для imm8 від 0 до 15 або 31 (тобто безпосереднє значення тільки восьми бітове і береться за модулем 16 або 32 в залежності від вибраного типу сегмента use16 або use32).

Якщо ланцюжок знаходиться в регістрі, то виконання команди зводиться до вибору відповідного біта з регістра, запису його значення в прапорець cf і, якщо це команда:

bt – завершити її виконання;

btc – знайдений біт інвертувати та завершити її виконання;

bts – знайдений біт установити в 1 та завершити її виконання;

btr – знайдений біт установити в 0 та завершити її виконання.

Якщо ланцюжок знаходиться в оперативній пам’яті, то нумерація бітів здійснюється відносно біта з номером 0 (нуль) – наймолодший біт байта з ефективною адресою EA (визначається операндом mem16 або mem32) команди btX. Старші біти мають додатні номери, а молодші – від’ємні. Номер шуканого біта (значення index в регістрі reg16 або reg32) вважається знаковим цілим числом, яке змінюється від до (use16) або від до (use32). При доступі до оперативної пам’яті процесор визначає адресу слова (use16) або подвійного слова (use32), в якому знаходиться шуканий біт з номером index. Тобто, звертається до двох байтів (use16) за адресою

EA+(2*(BitOffset DIV 16),

або до чотирьох байтів (use32) відповідно за адресою

EA+(4*(BitOffset DIV 32),

де EA (ефективна адреса ланцюжка) – визначається операндом dst (mem16 або mem32); BitOffset – значення операнда index (тобто вміст регістра reg16 або reg32); DIV – операція ділення (a DIV b – ціла частина від ділення a на b із заокругленням до . Далі, визначається номер біта у знайденому слові або подвійному слові, якщо , то відповідно так:

Якщо ж , то відповідно так:

Тут – означає операцію знаходження остачі від ділення першого операнда за модулем другого.

Після виконання команди btX значення всіх прапорців, крім cf, не визначені.

Зауваження. Команди bts і btr можуть застосовуватися для перевірки і модифікації семафорів в оперативній пам’яті, які показують стани розділюваних ресурсів у мультипроцесорній системі. Тоді перед ними потрібно записувати префікс lock для того, щоб процесор сформував апаратний сигнал блокування шини.

Команди сканування бітів. Сканування бітів вперед bsf (Bit Scan Forward) bsr (Bit Scan Reverse) використовуються для пошуку в слові або подвійному слові позиції першого біта установленого в 1. Загальне зображення bsX dst, src. Тут dst 16- або 32-бітовий регістр, а src – регістр або комірка оперативної пам’яті. Форми команд такі:

bsX reg16, reg/mem16; dsX reg/mem32

Якщо виконується команда bsf, то операнд src проглядається з молодших бітів до старших, а в команді bsr – зі старших розрядів до молодших. Номер розряду (index) першого зустрінутого біта в стані 1, розміщується в dst і zf=0.

Якщо операнд src нульовий, то прапорець zf установлюється в 1 і команда закінчується та вміст регістра dst не визначений.

Команди bsf і bsr впливають тільки на стан прапорця zf.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]