Процедура showmessage дает возможность вывести пользователю простое сообщение. При этом образуется дополнительное окно с названием проекта и кнопкой ОК. Выглядит все это так:
Синтаксис: ShowMessage(Msg: string);
Пример:
ShowMessage('Все задачи выполнены успешно');
Функция messageDlg дает возможность создавать сложные диалоговые запросы с применением обратной связи. Имеет форму дополнительного окна, дополненного изображением. Кроме того, можно применять диалоговые запросы. Название окна определяется типом запроса.
Синтаксис:
MessageDlg(Msg: string; AType: TMsgDlgType; ABut-tons: TMsgDlgButtons; HelpCtx: Longint): Word;
Msg – строковой параметр. Определяет выводимое сообщение;
Atype – внутренний параметр функции. Определяет тип сообщения:
1) mtWarning – сообщение о предупреждении;
2) mtError – сообщение об ошибке;
3) mtInformation – информационное сообщение;
4) mtConfirmation – сообщение о подтверждении;
5) mtCustom – сообщение не содержит в углу изображения. Название окна соответствует названию
исполняемого файла (аналогично showmessage);
Abuttons – определяет имена кнопок, отображающиеся в диалоговом запросе. Возможны значения: mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mblgnore, mbAll;
HelpCtx – включает номер раздела, используемый пользователем, если он вызовет справку, когда диалог активизирован.
Например:
MessageDlg(‘Продолжить выполнение программы’,
mtConfirmation, [mbYes, mbNo], 0);
Для определения того, какой вариант ответа вы/
брал пользователь, можно применить простую про/
верку. В этом случае исходный код будет иметь сле/
дующий вид:
If MessageDlg(‘Закончить выполнение задачи?’,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
Then
Begin
MessageDlg(‘Выполнение задачи закончено.’, mtIn/
formation, [mbOk], 0);
Создание сообщения с применением дополнительного окна достаточно трудно. Данный способ применяется для создания сложных запросов, когда одного только «Да» и «Нет» недостаточно. Например, когда от пользователя необходимо получить код продолжения, в зависимости от которого приложение выполнит те или иные операции.
42. Оптимизация по быстродействию в Ассемблер
Приведем некоторые из самых общих процедур этой категории.
1. Замена универсальных инструкций учитывающими конкретную ситуацию, например замена команды умножения на степень двойки на команды сдвига.
Уменьшение числа передач в программе: вследствие преобразования подпрограмм в макрокоманды для прямого включения в исполнимый код; за счет преобразования условных переходов, так, чтобы условие перехода было истинным относительно реже, чем причины для его отсутствия; перемещение условий общего характера к началу разветвленной последовательности переходов; изменение вызовов, сразу после чего происходит возврат в программу, в переходы и т. д.
2. Оптимизация циклов, в том числе сдвиг вычислений неизменяющихся величин за границы циклов, разворачивание циклов и «соединение» отдельных циклов, выполняемых одно и то же количество раз, в единый цикл («сжатие цикла»).
3. Наибольшее применение всех доступных регистров, в результате хранения в них рабочих значений каждый раз, когда это возможно, чтобы уменьшить число обращений к памяти, упаковка большого числа значений или флагов в регистры и устранение лишних продвижений стека (особенно на входах и выходах подпрограмм).
4. Применение специфических для этого процессора инструкций, например, инструкции засылки в стек прямого значения или умножения числа на непосредственный операнд, имеющийся в процессорах 80186, 80188, 80286, 80386 и 80486. Также примером могут быть двухсловные строковые инструкции, команды перемножения 32-разрядных чисел и деления 64-разрядного на 32-разрядное число, которые проводятся в процессорах 80386 и 80486. Программа должна, конечно, первоначально определять, с каким типом процессора она работает.
В процессорах 80 x 86, но не 80 x 88, возможно, удастся повысить скорость действия программы на несколько процентов в результате выравнивания расположения данных и меток, на которые осуществляется передача управления, относительно определенных границ.
Процессоры 8088 и 80188 имеют 8-разрядную шину, и для них не имеет значения, на какую границу выровнены данные, поэтому выравнивание можно не применять или установить на границу байта (1 байт, 8 бит); процессоры 8086, 80186 и 80286 обладают 16-разрядной шиной, и им проще действовать с данными, выровненными на границу слова (2 байта, 16 бит); процессор 80386, для которого свойственна 32-разрядная шина, использует выравнивание на границу двойного слова (4 байта, 32 бита); из-за особенностей своей внутренней кэш-памяти процессору 80486, тоже с 32-разрядной шиной, проще работать, если осуществляется выравнивание на границу параграфа (16 байт, 96 бит).
Читать дальше
Конец ознакомительного отрывка
Купить книгу