Кластерный компьютер Приемы повышения производительности Двоичная арифметика Программирование на языке ассемблера

Необходимость перевода числа из одной системы счисления в другую обусловлена тем, что пользователю удобнее иметь дело с десятичными или шестнадцатеричными кодами, а ЭВМ работают с двоичными кодами.

Вызовы подпрограмм

В процессоре 8088 есть команда, позволяющая вызывать процедуры, которые в языке ассемблера обычно называются подпрограммами (subroutines). По аналогии с командами перехода здесь существуют команды ближнего и дальнего вызова. В интерпретаторе реализован только ближний вызов. Объект вызова либо является меткой, либо располагается по действительному адресу. Параметры, необходимые для вызова подпрограмм, первоначально размещаются в стеке в обратном порядке (рис. В.З). Применительно к языку ассемблера параметры обычно называются аргументами, хотя принципиального различия между этими терминами нет. После размещения аргументов в стеке выполняется команда CALL. В первую очередь, она вводит в стек текущее значение счетчика команд, со-

храняя, таким образом, адрес возврата. Адресом возврата называется адрес, по которому возобновляется исполнение вызывающей программы после возврата из подпрограммы. Как распознать троянскую программу Большинство программных средств, предназначенных для защиты от троянских программ, в той или иной степени использует так называемое согласование объектов. При этом в качестве объектов фигурируют файлы и каталоги, а согласование представляет собой способ ответить на вопрос, изменились ли файлы и каталоги с момента последней проверки

Рис. В.З. Пример стека

Далее из метки или с действительного адреса загружается новый счетчик команд. При дальнем вызове значение регистра CS размещается в стеке перед значением регистра PC, а счетчик команд и регистр кодового сегмента загружаются непосредственными данными или с действительного адреса. На этом выполнение команды CALL завершается.

Команда возврата, RET, выталкивает из стека адрес возврата, сохраняет его в счетчике команд, после чего выполнение программы возобновляется с команды, следующей непосредственно за командой CALL. Иногда в команде RET роль непосредственных данных выполняет положительное число. Это число рассматривается как ряд байтов аргументов, размещенных в стеке перед вызовом; оно прибавляется к значению SP, и стек очищается. При дальнем вызове (выполнении команды RETF) регистр кодового сегмента выталкивается после счетчика команд.

В рамках подпрограммы необходимо реализовать доступа к аргументам. По этой причине выполнение подпрограммы часто начинается с размещения в стеке указателя базы и копирования текущего значения регистра SP в регистр ВР. Таким образом, указатель базы указывает на свое предыдущее значение. После адрес возврата определяется путем прибавления к ВР двойки, а первый и второй аргументы располагаются по действительным адресам ВР + 4иВР + 6, соответственно. Если процедуре нужны локальные переменные, необходимое количество байтов можно вычесть из указателя стека; обращаться к этим переменным можно из указателя базы путем отрицательного смещения. В примере на рис. В.З имеются три однословных локальных переменных, расположенных по адресам ВР - 2, ВР - 4 и ВР - 6. Таким образом, весь набор текущих аргументов и локальных переменных становится доступным через регистр В Р.

Основание позиционной системы счисления - в узком смысле - количество знаков, используемых для записи чисел в той или иной позиционной системе счисления. Основание показывает, во сколько раз вес каждой цифры в записи числа меньше веса цифры, стоящей в старшем соседнем разряде.
Кластерные вычисления Процессор 8088 Программирование на языке ассемблера