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



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

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

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

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

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

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

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

Числовые операции имеют возможность обрабатывать четыре типа сумм - без знака двоичные, меточныедвоичные, беззнаковые разряжённые действительные и не имеющие знака незапакованные 10-тичные . Двоичные суммы имеют возможность быть 4- и 64-разрядными. Десятичные уложенные числа вмещают в разряде две цифры, незапакованные - 1.

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

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

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


назад далее