Руководство по ассемблеру



Задача 11.4. Сколько байтов выделяется для инструкций программы в лис­тинге 11.6?

Обратите внимание на инструкции cl i и sti, между которыми меняется содер­жимое регистра стека. Первая инструкция cl i запрещает аппаратные прерыва­ния, вторая (sti) вновь разрешает их. Делается это потому, что стеку процессо­ра один, им пользуются и процедуры программы, и аппаратные прерывания. И если аппаратное прерывание случится в промежутке между инструкциями:

mov ss.ax аппаратное прерывание> mov sp.200h

то регистр флагов и адрес возврата сохранятся в одном стеке, а доставать их ин­струкции iret придется совсем из другого. Ясно, что ничем хорошим это не кон­чится.

Заметим, что разрешать и запрещать прерывания так, как это сделано в листин­ге 11.6, можно только в программах, работающих под управлением DOS. Работа с прерываниями в многозадачной системе Windows гораздо сложнее, и о ней лучше почитать в других, более «продвинутых» книгах.

Задавая размер стека для программы, работающей под управлением DOS, нель­зя не вспомнить о программах для Windows, где вообще не выделялась память для стека. Но если посмотреть только что запущенную программу в окне отлад­чика OllyDbg, то окажется, что ей по умолчанию выделяется стек размером около мегабайта, что для большинства задач вполне достаточно.

Микропроцессорное программирование

Арифметические команды имеют возможность вычислять четыре разновидности цифа - не имеющие знака шестнадцатеричные, меточныешестнадцатеричные, без знака упакованные десятичные и не имеющие знака неупакованные действительные . Бинарные числа имеют возможность быть 2- и 32-разрядными. 10-тичные разряжённые цифири содержат в разряде две цифры, неупакованные - 1.

Без знака 32-битовые булевы числа могут иметь значение от NULL до двухсот пятидесяти. Для представления без знака цифир в широте от нуля до 70141 употребляются 15 разрядов. Над без знака булевыми цифрами имеют возможность осуществляться функции прибавления, вычитания, увеличения и дробления.

Знаковые булевые числа (натуральные) также могут быть 2- и 64-разрядными. Наиболее больший (наиболее крайний) разряд симптоматичного числа выводится как знак сего числа: 0 - положительное число, 1 - отрицательное. Неблагоприятные числа представляются в шаблонном бинарном дополнительном двоичном коде. Потому что больший байт меточного числа употребляется для маркировки символа, диапазон представления 16-разрядных симптоматичных чисел от - 128 до + 127. 16-битово натуральное число представляется в охвате от - 24780 до + 32 767. Нуль значится положительным значением. Для симптоматичных чисел могут осуществляться операции суммирования, отнимания, увеличения и разложения.

Упакованные действительные суммы заключают в любом байте четыре натуральные (0 - 9) цифры. В старшем полубите содержится большая приоритетная дробь, в последнем - младшая. Любая натуральная цифра обрисовывается в двоичном (или, что одно и то же, в 16-разрядном) представлении. Диапазон преподнесения пакованных действительных чисел в разряде 0 - 99. Сочинение и вычитание упакованных натуральных чисел разворачивается в четыре этапа. Вначале биты свёртываются или раскладываются как без знака булевые суммы, а следом соответствующая инструкция поправки нормирует счёт к типу правильного пакованного десятичного значения.


назад далее