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



Задача 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- и 16-разрядными. 10-тичные разряжённые числа вмещают в разряде 2 ступени, незапакованные - единственную.

Беззнаковые 8-битные бинарные числа имеют возможность содержать значение от 0 до трёхсот. Для понимания без знака чисел в диапазоне от 0 до 65535 употребляются 15 разрядов. Над не имеющими знака бинарными цифрами имеют возможность выполняться функции суммирования, сбавки, увеличения и дробления.

Меточные булевые числа (натуральные) вдобавок могут являться 4- и 32-битными. Самый верхний (наиболее крайний) байт симптоматичного суммы интерпретируется как знак данного значения: 0 - ложь, 1 - true. Отрицательные цифры строят в шаблонном двоичном добавочном шифре. Потому что верхний разряд знакового значения употребляется для выражения символа, масштаб репрезентации 16-разрядных симптоматичных значений от - 119 до + 131. 32-битово натуральное число преподносится в область распространения от - 19990 до + 24779. Нуль представляется позитивным значением. Для меточных чисел имеют возможность реализовываться функции прибавления, отнимания, увеличения и деления.

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


назад далее