Assembler для начинающих

Почему вас могло бы заинтересовать программирование на языке ассемблера? Cегодня повсюду используются такие языки высокого уровня как Бэйсик, Фортран и Паскаль . Возможно, вы уже знакомы по крайней мере с одним языком высокого уровня. Если вы постоянно пльзуютесь персональным компьютером IBM, то вы знаете, что интерпритатор Бэйсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в ассемблере из-за его эффективности и точности.
Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке ассемблера создаст программу более компактную и быстродействущую, чем такая же программа, написанная на языке высокого уровня. Это так практически для всех небольших или средних программ. К сожалению, по мере возрастания размеров, программы на языке ассемблера теряют часть своих преимуществ. Это происходит из-за необходимого в ассемблерной программе внимания к деалям. Как вы увидите, язык ассемблера требует от вас планирования каждого действия компьютера. В небольших программах это позволяет оптимизировать работу программы с аппаратными средствами. В больших же программах огромное количество деталей может помешать вам эффективно работать над самой программой, даже если отдельные компоненты программы окажутся очень неплохими. Безусловно, программирование на языке ассемблера отвечает потребностям не каждой программы.

Программирование на языке Ассемблера
Почему в этом тексте IBM PC берется в качестве базовой для изучения программирования на языке ассемлера? Для этого есть несколько причин. Во-первых, IBM PC - новая и мощная машина. Как персональный компьютер она обладает расширенными возможностями выходящими за рамки возможностей более ранних ПК. Как вы подробнее увидете дальше, PC использует микропроцессор Intel 8088. Этот процессор может выполнять 16-битовую арифметику и адресацию над более чем миллионом символов памяти. Эти возможности ставят его ближе по мощности к большим ЭВМ, чем к ранним персональным компьютерам.

Программирование на языке Ассемблера
Персональный компьютер фирмы IBM (IBM PC)

Основы компьютерных вычислений
В этой главе разъясняются свойства компьютеров. Она расскажет вам как компьютеры работают и почему они делают это именно так. Некоторые положения могут оказаться знакомыми вам. Если у вас нет опыта программирования на языке ассемблера, то многие операции будут для вас новыми.

Двоичная арифметика
Принципы работы компьютера
Процедуры
Стек
Прерывания
Двоичное дополнение
Шестнадцатиричное представление
Машинный язык и язык Ассемблера
Синаксис языка Ассемблера
Принципы работы Ассемблера

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

Сегментные регистры
Предназначение сегментов
Оператор Segment
Оператор Assume
Управляющие рагистры
Указатель команд
Флаг захвата
Флаг прерываний
Флаг направления
Указатель стека

Команды управления микропроцессором
Есть три команды, которые непосредственно управляют состоянием флага переноса. Команды STC, CLC, CMC соответственно могут устанавлмвать, сбрасывать и изменять флаг переноса. Этот флаг - единственный, которому уделено такое внимание, и в первую очередь, благодаря важности флага переноса при операциях с повышенной точностью. Флаг переноса критичен на промежуточных шагах любых многословных операций. Возможность сбрасывать или устанавливать флаг переноса может помочь при циклической обработке с повышенной точностью. На Фиг. 4.31 показан пример использования команды CLC. Цикл внутри примера складывает отдельные байты двух 10-разрядных упакованных десятичных чисел.

Установка флагов
Специальные команды
Пересылка данных
Команда пересылки
Команда замены
Команды ввода и вывода
Загрузка исполнительного адреса
Загрузка указателя
Пересылка флагов
Перекодировка

Dos и Ассемблер
В этой главе излагаются все детали, необходимые для ассемблирования и выполнения программ. В предыдущих главах объяснялось, как работает микропроцессор 8088. Теперь время проверить полученные знания, так как только самостоятельное составление и успешная прогонка программ могут дать полное представление о системе команд микропроцессора 8088.

Дисковая операционная система
Редактор связей
Многомодульность
EXTRN и PUBLIC
Операция редактирования связей
Карта связей
Отладчик DEBUG
Преодразование файла типа exe в файл типа com
Файловая система
Имена файлов

Свойства Макроассемблера
В этой части будут описаны некоторые свойства макроассемблера, разработанного в фирме IBM. Хотя мы уже рассмотрели все команды процессора 8088, в ассемблере имеются и другие команды. Мы уже обсудили некоторые из этих псевдокоманд, например, операторы определения данных DB и DW. В этой главе будут введены более мощные средства языка ассемблера. Их объединяет то, что их использование делает написание программ на языке ассемблера более простым и легким.

Макроопределения
Аргументы макрокоманд
Ассемблирование по условию
Макрокоманды повторения
Макрооператоры
Команды INCLUDE
Сегменты
Структуры

Математический сопроцессор 8087
Конструкторы микропроцессора Intel 8088 предусмотрели для него уникальную возможность, характерную лишь для семейства микропроцессоров 8086/8088. Конструкции микропроцессора позволяет иметь в системе сопроцессор. Сопроцессор - это устройство, расширяющее возможности центрального процессора. Арифметический сопроцессор 8087 является сопроцессором центрального микропроцессора 8088, добавляющий команды числовой обработки и регистры с плавающей точкой. Эти дополнительные арифметические возможности расширяют набор команд микропроцессора 8088, и значительно увеличивают вычислительную мощность в тех случаях, когда программа выполняет операции с плавающей точкой и повышенной точности.

Работа 8087
Типы данных 8087
Представление данных с плавающей точкой
Форматы действительных чисел
Определение действительных чисел
Модель программирования 8087
Регистровый стек
Управляющее слово
Слово состояния
Набор команд сопроцессора 8087

Персональный компьютер IBM
Эта глава описывает устройство персонального компьютера фирмы IBM (IBM PC). Поскольку данная книга посвящена программированию на языке ассемблера для IBM PC, вполне уместно рассмотреть аппаратное обеспечение машины. Эта глава не предназначена для инженеров и техников; она скорее для тех, кто пишет на языке ассемблера программы, которые выполняются на IBM PC.

Системное оборудование
Адаптер дисковода
Прямой доступ у памяти
Динамик
Клавиатура
Время суток
Возможности системы
Видеоадаптеры
Адаптер монохромного дисплея и принтера
Адаптер цветного графического монитора

Базовая система ввода/вывода
В предыдущей главе изучалась аппаратура IBM PC. Фирма IBM поставляет стандартные управляющие программы для рассмотренных выше аппаратных компонент. Эти программы находятся в ПЗУ на системной плате и носят название BIOS (Basic Input/Output System, базовая система ввода-вывода). В этой главе объясняются функции, обеспечиваемые BIOS. Материалом этой главы нужно пользоваться вместе с гл.3 и приложением A технического описания IBM PC. В гл.3 описана базовая системы ввода-вывода, в частности некоторые ее функции, а в приложении A приведен полный ассемблерный листинг BIOS IBM PC.

Замечания по листингу ROM BIOS
Кассета
Дискета
Области данных драйвера BIOS дискеты
Команды чтения и записи
Команда проверки
Команда форматирования
Дисплей
Области данных дисплея
Функции ввода вывода дисплея

Расширения системы и подпрограммы на языке Ассемблера
В этой главе рассказывается о способе использования программ на языке ассемблера в больших программах. Приведенные ранее примеры были автономными программами на языке ассемблера. Ни один из других языков программирования не позволяет так, как язык ассемблера, управлять техническими средствами. Однако во многих случаях выбор языка ассемблера в качестве языка программирования может оказаться неправильным. Часто лучше всего бывает применять язык высокого уровня в сочетании с подпрограммами на языке ассемблера.

Расширение системы BIOS
Расширение системы BIOS
Возврат программы в DOS
Загрузка в верхнюю часть памяти
Процедуры на языке Ассемблера
Процедура Бэйсика BLOAD
Вставка короткой программы
Компилируемые языки высокого уровня

Заключение
Язык ассемблера - мощное средство программирования. Он позволяет программисту осуществлять всестороннее управление аппаратными средствами ЭВМ. Однако такое управление заставляет программиста вникать в детали, далекие от основного содержания программы. Все преимущества языка ассемблера оборачиваются подчас пустой тратой времени на многочисленные детали.

Ассемблер для Windows

Прежде всего, как и полагается в предисловии, отвечу на возможное замечание: зачем нужен ассемблер в Windows, если есть, например, Си и другие языки. Зачем нужен ассемблер, я уже писал в упомянутой выше книге. Позволю себе процитировать ее: "Зачем нужен язык ассемблера? - спросят меня. Самой простой и убедительный ответ на поставленный вопрос такой - затем, что это язык процессора и, следовательно, он будет нужен до тех пор, пока будут существовать процессоры. Более пространный ответ на данный вопрос содержал бы в себе рассуждение о том, что ассемблер может понадобиться для оптимизации кода программ, написания драйверов, трансляторов, программирования некоторых внешних устройств и т.д. Для себя я, однако, имею и другой ответ: программирование на ассемблере дает ощущение власти над компьютером, а жажда власти - один из сильнейших инстинктов человека".

Введение
Хорошее знание ассемблера помогает легко разбираться в коде программ. Взломщики чужих программ всегда хорошо владеют ассемблером. Вопросы анализа кода программ не часто рассматривают в компьютерной литературе. Знание этого не только не помешает любому программисту, но и поможет ему защищать свои программы более эффективно.

Основы битного программирования в Windows
В данной главе я намерен дать некоторую вводную информацию по средствам программирования на языке ассемблера. Данная глава предназначена для начинающих программирование на ассемблере, поэтому программистам более опытным ее можно пропустить без особого ущерба для себя. Прежде всего замечу, что в названии главы есть некоторая натяжка, т.к. технологии трансляции и в MS DOS, и в Windows весьма схожи. Однако программирование в MS DOS уходит в прошлое.

Объединение модулей
Пример программы c упрощенной сегментацией
Краткий обзор ряда других программ
Редакторы
Отладчики
Дизассемблеры
Пример дизассемблированш программы
Компиляторы ресурсов
Редакторы ресурсов

Примеры простейших программ
В данной главе мы серьезно начинаем работать с сообщением WM_PAINT. В главе 1.3 мы уже рассматривали это сообщение, но не применяли его. Причиной было то, что в окне у нас были лишь управляющие элементы, но не было текстовой информации и графики. Теперь мы исправляем положение. Кроме сообщения WM_PAINT, речь в этой главе пойдет о множестве проблем, возникающих при программировании в Windows.

Пример простейшей программы с текстом
Текстовая строка все время в середине окна
Рассмотрим теперь вопрос о том как выводить текстовую информацию
Фрагмент программы выводящей текст с заданным шрифтом (см Рисунок )
Процедура копирования одной
Этот раздел главы посвящается графике
Простая программа для демонстрации графики
Результат работы программы на Рисунок
Рассмотрим несколько простых консольных функций
Данный раздел будет поевящен обработке команд мыши и клавиатуры

Структура исполняемых модулей
Исполняемым форматом в Windows является формат PE. Сокращение PE означает Portable Executable, т.е. переносимый исполняемый формат. Этот формат имеют как ЕХЕ-файлы, так и динамические библиотеки. Важно, что сейчас фирма Microsoft ввела "новый" формат и для объектных модулей - это COFF-формат (COFF - Common Object File Format), который, однако, на поверку оказался, в сущности, все тем же PE-форматом.

Отладка анализ кода программ драйверы
Структура исполняемых модулей
Структура ЕХЕпрограммы для MS DOS
Общая структура РЕмодуля
Общая структура РЕзаголовка
Фрагмент РЕзаголовка
Описание заголовка РЕ
Секция экспорта ( edata) Общая структура
Вызов импортируемой функции
Таблица директория импорта

Примеры программ использующих таймер
Таймер является одним из мощных инструментов, предоставляемых операционной системой и позволяющих решать самые разнообразные задачи. С таймером Вы познакомились, когда занимались консольными приложениями. Там мы пользовались функциями timeSetEvent и timeKillEvent. Для консольных приложений это очень удобные функции. В оконных приложениях чаще используют функции SetTimer и KillTimer.

Пример реализации простейшего таймера
Следующая программа несколько сложнее предыдущей
Пример использования двух таймеров
В данном разделе мы рассмотрим весьма интересный вопрос о всплывающих подсказках
Пример диалогового окна с всплывающими подсказками
Диалоговое окно с всплывающими подсказками
Многозадачное программирование
Под процессом будем понимать объект
Пример создания процесса
Теперь пришла пора вплотную заняться потоками

Приложения
В силу ограниченного объема мы не можем дать полный список API-функций — их насчитывается более двух тысяч. Мы даем список API-функций, которые содержатся в данной книге с кратким комментарием и указанием глав, где они были использованы или хотя бы упомянуты. Вторая таблица посвящена сообщениям Windows.

Регистры общего назначения
Регистр флагов
Сегментные регистры
Регистр CR
Системные адресные регистры
Регистры отладки
Команды пересылки данных
Команды вводавывода
Инструкции работы со стеком
Инструкции целочисленной арифметики

Создание операционной системы на Ассемблере

В своей работе я буду использовать:
Ассемблер nasm, который мне очень нравится из-за своей многоплатформенности (есть версии для UNIX, DOS и Windows), поддержкой команд практически всех современных процессоров и многообразием понимаемых форматов.
На Си мы будем писать не много, и для наших целей подойдет практически любой ANSI C компилятор. (ANSI C - это стандарт Си, дорабатывался последний раз в 1989 году, и практически все компиляторы ему соответствуют).

Для начала разберемся, как устроены системы.
Аппаратные возможности компьютеров.
Теперь немного поподробнее про устройство ядра.
Вопросы к подписчикам
Здравствуйте, уважаемые подписчики.
Выпуск №2
Как процессор работает с памятью?
Страничная организация памяти.
Многозадачность.
Что из всего этого следует?

Эволюция современного мирового хозяйства - перейти
Экономика. Региональная - перейти
Муниципальный менеджмент - перейти
Государственные и муниципальные финансы - перейти
Финансы муниципальных образований - перейти
Региональная экономика - перейти
Основные понятия экономики региона - перейти
Экономика. Теневая - перейти
Delphi 6 -программирование - перейти
Введение - перейти
Основные отличия различных версий DELPHI - перейти
Знакомство со средой DELPHI - перейти
Основы визуального программирования - перейти
Знакомство с компонентами - перейти
Введение в Object Pascal - перейти





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий