В книге дано описание основных элемеитов языка Асссмблера семейства ІВМ РС: системы счисления машинное представление данных и команд, основы 16- и 32-разрядного программирования, программирование сопроцессора. ввод-вывод информации в Dos и Windows, использование макросредств. Подробно, шаг за шагом на многочисленных примерах законченных программ рассматриваются идеи и принципы организации вычислений на Ассемблере от простого к сложному, используя аналогию и прямую поддержку со стороны алгоритмических языков Раsсаl (Вогlаnd Раsсаl-7.0. Dеlрhi-5) и С/С++ (Вогlаnd С++ 3.1, 4.5. 5.02, Вогlап С++).
Мы с ним сначала разберемся на С. Чтобы легче было следить за элементами массива, сделаем визуализацию процесса получения произведения как в С. У вашего варианта, дорогой мой читатель, вполне вероятно, будут другие, свои, СПЕЦИФИЧЕСКИЕ особенности, отличные от тех, которые мы рассматриваем. Учитесь эти особенности ВИДЕТЬ. Функцию на Ассемблере предусмотрим, но пока подключать ее НЕ будем — ее вызов из С. Исходный текст программы . Знак минус для произведения положительных элементов НИКАК НЕ МОЖЕТ БЫТЬ. Значит, нужно менять тип результата, чтобы справиться с анализом диапазона. заменим в нашей программе три строки . Исправление ошибок в программе переход к варианту . Тестирование программы вариант . Теперь можно переходить к Ассемблеру. Результаты окончательного тестирования Конечно, реально отладить этот достаточно сложный алгоритм так быстро НЕ получится. Но, к счастью, мы моделируем обучение не в реальном масштабе времени, поэтому у нас все получается быстро и просто. На самом деле это НЕ так. Но, показав достаточно подробно отладку лабораторной работы . Итак, откроем в программе на С. Посмотрим на наши тесты. Лабораторный практикум Найти произведение последних . Анализ этих тестов показывает, что нормально решить нашу задачу, применяя . Очень уж узок при этом получается диапазон допустимых значений. Можете полюбопытствовать, как эту задачу решил компилятор С. Не забыли, как это делается. Очень полезно учиться и у компиляторов. Сравнить реализацию машинного кода . Контрольные вопросы . Особенности выполнения изучаемых базовых команд процессора . Разница в организации условных переходов для знаковых и беззнаковых данных. Основные особенности работы с цепочечными командами. Целочисленный массив как строка в Ассемблере. Соглашения о передаче параметров, принятые для используемого в лабораторной работе алгоритмического языка. Состояние стека при выполнении процедур и функций с параметрами. Ассемблирование и дизассемблирование команд на своих примерах. Понятие о байтах кода операции, способах адресации, регистрах и смещениях. Необходимость в контроле диапазона целочисленных данных при вводе. Диапазон допустимых значений для целочисленных переменных. Пример решения типового варианта Вариант . Исходные данные задать самостоятельно, учитывая формат элементов массива А. В программе на С. Исходные данные должны вводиться корректно и с проверкой на область допустимых значений. Тип результата определяется из контекста задачи. При выполнении данной лабораторной работы нам понадобятся материалы главы . Конечно, здесь очень пригодится и опыт, приобретенный нами при выполнении лабораторных работ . Алгоритмически при решении нашей задачи ничего НЕ изменится, только представление целочисленного массива и его обработка будут выполнены по. Представление целочисленного массива с элементамитипа . Отличие от лабораторной работы . Для нашей задачи . Эта запись означает, что нужно взять содержимое слова из области памяти по адресу, хранящемуся в регистре . Регистр ВХ, который в лабораторной работе . Исходный текст модуля . Лабораторный практикум ; Подводим указатель . Тестирование программы Найти произведение последних . Лабораторный практикум . Сравнение реализаций машинного кода . В общем, не очень много, но и программка сама не большая. Соответственно немного изменилась и обработка такого массива. Сенека Луций Аиней мл. Исходные данные должны вводиться корректно . Результат также должен быть проверен на область допустимых значений. Данные должны передаваться в подпрограммы . Порядок работы . Лабораторный практикум Контрольные вопросы . Особенности выполнения изучаемых команд процессора . Соглашения о передаче параметров, принятые для используемого в лабораторной работе алгоритмического языка. Состояние стека при выполнении процедур и функций с параметрами. Ассемблирование и дизассемблирование команд на своих примерах. Понятие о байтах кода операции, способа адресации, . Необходимость в контроле диапазона целочисленных данных при вводе. Диапазон допустимых значений для целочисленных переменных при . для знаковых целочисленных . Исходные данные должны вводиться корректно . Результат также должен быть проверен на область допустимых значений. Данные должны передаваться в подпрограммы . Поэтому и компилятор Ассемблера тоже должен быть . Принимаем более продвинутый компилятор версии . При выполнении данной лабораторной работы нам понадобятся в основном материалы главы . Кроме того, здесь будет полезен и опыт, приобретенный нами при выполнении лабораторной работы . Проиллюстрируем наши действия по шагам. Пример решения типового варианта Будем решать тот же . Анализ особенностей задачи . Алгоритм вычисления условного выражения пока . Это позволит нам сделать модуль на . Заменим и команду распространения знака . Кроме того, смещения при условных переходах тоже становятся по умолчанию . Тогда смещения станут опять . Изменим главную программу на С. Посмотрим, к чему это приведет. Главная программа на С. Выделим жирным шрифтом наиболее значимые места исходного кода, которые изменились по сравнению с лабораторной работой . Исходный текст программы . тестирование программы вариант . Тест работает нормально. тестирование и анализ программы с . Все шло хорошо, пока . Будем контролировать в Ассемблере переполнение и при втором умножении. Это сузит нам диапазон решения, но зато избавит от неприятной ситуации. Нормально решить данную проблему в Ассемблере можно только с помощью СОПРОЦЕССОРА. Вот почему в С. Исправление модуля на Ассемблере и программы на С. Лабораторный практикум Изменения в программе на С. Тестирование исправленного варианта . В тестовом примере . Нужен, как уже указывалось, СОПРОЦЕССОР. Исходные данные задать самостоятельно. В программе на С. Исходные данные должны вводиться корректно и с проверкой на область допустимых значений. Тип результата — вещественный и определяется из контекста задачи.