Assembler. Учебник для вузов. Юров В.И.

В учебнике рассматриваются вопросы программирования на языке ассемблера для компьютеров на базе микропроцессоров фирмы Intel. Основу книги составляет материал, являющийся частью курса, читаемого автором в высшем учебном заведении и посвященного вопросам системного программирования. По сравнению с первым изданием учебник существенно переработан. Исправлены ошибки и неточности. Добавлено описание команд для Intel-совместимых процессоров (до Pentium IV включительно). Книга будет полезна студентам вузов, программистам и всем желающим изучить язык Assembler.

Assembler. Учебник для вузов. Юров В.И.

Assembler. Учебник для вузов. Юров В.И.

1
Ключевой проблемой в вычислительном мышлении является масштаб и сложность систем, которые мы изучаем или строим. Основной метод, используемый для управления этой сложностью, — абстракция . Процесс абстрагирования принимает множество специфических форм, таких как моделирование, разложение и обобщение. В каждом случае сложность решается путем сокрытия сложных деталей за простой абстракцией или моделью ситуации. Например,
* Карта Лондонского метрополитена-это простая модель сложной реальности — но она точно содержит информацию, необходимую для планирования маршрута от одной станции до другой.
* Процедура вычисления квадратных корней скрывает сложную реализацию (итеративное приближение к корню, обработка особых случаев) за простым интерфейсом (дайте мне число, и я верну его квадратный корень).
Вычислительное мышление ценит элегантность, простоту и модульность по сравнению со специальной сложностью.
Моделирование-это процесс разработки представления о проблеме, системе или ситуации реального мира, которое отражает аспекты ситуации, важные для конкретной цели, при этом опуская все остальное. Примеры: карта лондонского метро; раскадровки для анимации; диаграмма перехода веб-страницы; положение, масса и скорость планет, вращающихся друг вокруг друга.
Для разных целей нужны разные модели. Пример: географическая карта метрополитена более подходит для вычисления времени в пути, чем известная топологическая карта метрополитена; сеть узлов и ребер может быть представлена в виде рисунка или таблицы чисел.
Для конкретной ситуации может потребоваться несколько моделей. Пример: веб-страница имеет структурную модель (заголовки, списки, абзацы) и модель стиля (как отображается заголовок, как отображаются списки). Браузер объединяет информацию из обеих моделей при отображении веб-страницы.

Проблему часто можно решить, разложив ее на подзадачи, решив их и составив решения вместе, чтобы решить исходную проблему. Например, «сделать завтрак «можно разбить на»сделать тост; сделать чай; сварить яйцо». Каждый из них, в свою очередь, может быть разложен, поэтому процесс естественно рекурсивен.
Организация данных также может быть разложена. Например, данные, представляющие население страны, могут быть разложены на такие единицы, как физические лица, профессии, места жительства и т.д.
Иногда этот нисходящий подход является способом разработки решения; но он также может быть полезным способом понимания решения независимо от того, как оно было разработано в первую очередь. Например, архитектурная структурная схема, показывающая основные компоненты компьютерной системы (например, клиент, сервер и сеть) и то, как они взаимодействуют друг с другом, может быть очень полезным способом понимания этой системы.
Обобщение и классификация
Сложности часто избегают путем обобщения конкретных примеров, чтобы сделать явным то, что разделяется между примерами и что в них отличается. Например, написав процедуру для рисования квадрата размера 3 и другую процедуру для рисования квадрата размера 5, можно обобщить на процедуру для рисования квадрата любого размера N и вызвать эту процедуру с параметрами 3 и 5 соответственно. Таким образом, большая часть кода, используемого в различных программах, может быть написана один раз, отлажена один раз, задокументирована один раз и (самое главное) понята один раз.
Другой пример-классификация, поощряемая объектно-ориентированными языками, когда родительский класс выражает общие признаки объекта, например, размер или цвет фигуры, в то время как подклассы выражают различные признаки (например, квадрат и треугольник).
Обобщение — это процесс распознавания этих общих паттернов и использования их для управления сложностью путем совместного использования общих черт.
3.2 Программирование
Информатика-это больше, чем программирование, но программирование-это абсолютно центральный процесс для информатики. В образовательном контексте Программирование поощряет творчество, логическое мышление, точность и решение проблем, а также способствует развитию личностных, учебных и мыслительных навыков, необходимых в современной школьной программе. Программирование придает конкретную, осязаемую форму идее «абстракции» и многократно показывает, насколько она полезна.
Проектирование и написание программ
Каждый ученик должен иметь возможность многократно разрабатывать, писать, запускать и отлаживать исполняемые программы. То, что означает «исполняемая программа», может варьироваться в широких пределах, в зависимости от уровня ученика и количества доступного времени. Например, все нижеперечисленное включено в «Программирование»:
* Небольшие доменные языки, такие как инструкции для простого робота или черепаха в стиле логотипа.
* Визуальные языки, такие как Scratch BYOB или Kodu.
* Текстовые языки, такие как C#, C++, Haskell, Java, Pascal, PHP, Python, Visual Basic и так далее.
* Формулы электронных таблиц
Как интерпретируемые, так и компилируемые языки являются «исполняемыми». В каждом случае базовые понятия более важны, чем конкретный язык программирования или среда.
Способность понимать и объяснять программу гораздо важнее, чем способность создавать рабочий, но непонятный код. В зависимости от уровня, ученики должны уметь:
Разработка и написание программ, которые включают в себя
o последовательность: выполнение одного шага за другим. o выбор (if-then-else): делать либо одно, либо другое. o повторение (итерационные циклы или рекурсия).
o языковые конструкции, поддерживающие абстракцию: обертывание вычисления в именованную абстракцию, чтобы его можно было использовать повторно. (Наиболее распространенной формой абстракции является понятие «процедуры» или «функции» с параметрами.) o некоторая форма взаимодействия со средой программы, такая как ввод/вывод или программирование на основе событий.
Находите и исправляйте ошибки в их коде
Вдумчиво обдумайте свою программу, включая оценку ее правильности и соответствия назначению; понимание ее эффективности; и описание системы другим.
Механизмы абстракции
Эффективное использование механизмов абстракции, поддерживаемых языками программирования (функциями, процедурами, классами и т. д.), является центральным элементом управления сложностью больших программ. Например, процедура поддерживает абстракцию, скрывая сложные детали реализации за простым интерфейсом.
Эти абстракции могут быть глубоко вложены, слой за слоем. Пример: процедура, чтобы нарисовать квадрат вызывает процедуру, чтобы нарисовать линию; процедуру, чтобы нарисовать линию, вызывает процедуру, чтобы нарисовать пиксель; процедуру, чтобы нарисовать пиксель вызовы процедуры для вычисления адреса памяти из (Х,Y) пиксель координат.
Помимо использования процедур и библиотек, созданных другими людьми, учащиеся должны научиться создавать собственные новые абстракции. Типичный процесс
* Признайте, что вы пишете более или менее один и тот же код неоднократно. Пример: нарисуйте квадрат размером 3; нарисуйте квадрат размером 7.
* Разработка процедуры, обобщающей эти экземпляры. Пример: нарисуйте квадрат размера N.
* Замените экземпляры вызовами процедуры. На более высоком уровне ключевым процессом является распознавание стандартного «шаблона проектирования» и повторное использование существующих решений. Например:
Простые структуры данных, такие как переменные, записи, массивы, списки, деревья, хэш-таблицы.
Шаблоны проектирования более высокого уровня: разделяй и властвуй, конвейеризация, кэширование, сортировка, поиск, отслеживание, рекурсия, клиент/сервер, модель/представление/контроллер.
Отладка, тестирование и рассуждения о программах
Когда запрограммированная система выходит из строя, как я могу это исправить? Компьютеры могут казаться настолько непрозрачными, что поиск неисправностей вырождается в деморализующий процесс попытки произвольно сгенерированных «решений», пока что-то не сработает. Программирование дает учащимся возможность выработать системный подход к выявлению, диагностике и исправлению неисправностей, а также развить навыки отладки, в том числе:
Чтение и понимание документации. Объяснение того, как код работает или может не работать.
• Ручное выполнение кода, возможно, с помощью карандаша и бумаги.
* Изоляция или локализация неисправностей путем добавления трассировки или профилирования.
* Добавление комментариев, чтобы сделать код более читаемым человеком.
* Добавление кода проверки ошибок для проверки внутренней согласованности и логики.
* Поиск кода, вызывающего ошибку, и его исправление.
* Выбор тестовых случаев и построение тестов.
Примечание: на ключевых этапах 2-4 мы не рекомендуем уделять значительное внимание процессам разработки программного обеспечения (анализ требований, спецификация, документация, планы тестирования и т.д.). Это очень важные темы для учеников, которые специализируются на этом предмете, но они, как правило, затеняют или доминируют над другими целями обучения.

[свернуть]

Предложения интернет-магазинов.