![](/user_photo/2706_HbeT2.jpg)
- •История развития эвм
- •Особенности архитектуры современной вычислительной машины
- •Общее устройство компьютера и особенности архитектуры
- •Архитектура памяти эвм
- •Виртуальная память
- •Система адресации
- •Принципы обмена информацией с внешними устройствам
- •Процессор
- •Регистры процессора
- •Специальные средства отладчика
- •Машинная адресация
- •Требования языка ассемблера
- •Директивы
- •Инициализация программы
- •Ассемблирование и выполнение программ
- •Директивы определения данных
- •Непосредственные операнды
- •Различия между программами в ехе и сом-файлах
- •Логика и организация программы
- •Флаговый регистр
- •Команды условного перехода
- •Расширенные операции пересылки
- •Команды логических операций: and, or, xor, test, not
- •Арифметические команды
- •Команды обработки строк
- •Команды прерывания
- •Характеристики систем прерывания
Инициализация программы
Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы:
1) указать ассемблеру, какие cегментные регистры должны соответствовать сегментам,
2) сохранить в стеке адрес, находящийся в регист ре DS, когда программа начнет выполнение
3) записать в стек нулевой адрес
4) загрузить в регистр DS адрес сегмента данных. 5)Выход из программы и возврат в DOS сводится к использова нию команды RET.
1. ASSUME - это ассемблерная директива, которая устанавливает для ассемблера соответствие между конкретными сегментами и сегментными регистрами; Ассоциируя сегменты с сегментными регистрами, ассемблер сможет определить смещения к отдельным областям в каждом сегменте.
2. Загрузочному модулю в памяти непосредственно предшествует 256-байтовая (шест.100) область, называемая префиксом программного сегмента PSP. Программа загрузчика использует регистр DS для установки адреса начальной точки PSP. Пользовательская программа должна сохранить этот адрес, поместив его в стек. Позже, команда RET использует этот адрес для возврата в DOS. 3. В системе требуется, чтобы следующее значение в стеке являлось нулевым адресом . Для этого команда SUB очищает регистр AX, вычитая его из этого же регистра AX, а команда PUSH заносит это значение в стек. 4. Загрузчик DOS устанавливает правильные адреса стека в регистре SS и сегмента кодов в регистре CS. Поскольку программа загрузчика использует регистр DS для других целей, необходимо инициализировать регистр DS двумя командами MOV. 5. Команда RET обеспечивает выход из пользовательской программы и возврат в DOS, используя для этого адрес, записанный в стек в начале программы командой PUSH DS.
Ассемблирование и выполнение программ
Прежде чем исходную программу, написанную на языке ассемблера, можно будет выполнить, ее необходимо ассемблировать в объектную программу на машинном языке. Задача осуществляется программой-ассемблером, заменяющей все символические обозначения операций и адресных режимов двоичными кодами, а все имена и метки — их настоящими значениями.
Ассемблер присваивает командам и блокам данных адреса, начиная с адреса, заданного в директиве ORIGIN. Эта директива отвечает за размещение по нужным адресам констант, которые могут быть заданы в директивах DATAWORD, и резервирует память в соответствии с указаниями, содержащимися в директивах RESERVE.
Важнейшим моментом процесса ассемблирования является определение значений, заменяющих имена. В тех случаях, когда значение имени определяется директивой EQU, это очень простая задача. Но если имя задается в поле «Метка» команды, представляемое им значение определяется положением этой команды в ассемблированной объектной программе. Поэтому в ходе формирования машинного кода ассемблер должен отслеживать адреса, по которым будут загружаться последовательные команды программы. В некоторых случаях ассемблер не заменяет представляющее адрес имя реальным значением этого адреса. Сканируя исходную программу, ассемблер записывает все имена и соответствующие им числовые значения в специальную таблицу, называемую таблицей символов. Когда имя встречается в программе повторно, оно заменяется соответствующим значением из таблицы. На первом проходе ассемблер создает полную таблицу символов. В конце этого прохода всем встречающимся в программе именам должны быть поставлены в соответствие числовые значения.
После этого ассемблер снова проходит по исходной программе и заменяет все имена значениями из таблицы символов. Такой ассемблер называется двухпро-ходным.
Ассемблер сохраняет объектную программу на магнитном диске. Перед выполнением эта программа загружается в память компьютера. Для этого там должна присутствовать еще одна служебная программа, называемая загрузчиком. Загрузчик выполняет последовательность операций ввода, необходимых для пересылки программы на машинном языке с диска в заданное место памяти. При этом загрузчик должен знать длину программы и адрес, по которому ее необходимо загрузить. Обычно ассемблер помещает такого рода информацию в заголовок программы, предшествующий объектному коду. Загрузив код, загрузчик начинает выполнение объектной программы с перехода к той ее команде, которая должна быть реализована первой. Адрес этой команды включается в программу на языке ассемблера в качестве операнда директивы ассемблера END. Ассемблер помещает этот адрес в заголовок, предшествующий объектному коду на диске.
Программа начинает выполняться и выполняется до своего завершения, если только в ней нет логических ошибок. Пользователь должен уметь находить такие ошибки. Что касается синтаксических ошибок, то ассемблер выявляет их сам и сообщает об этом пользователю. В состав системного программного обеспечения обычно включают программу, называемую отладчиком. Эта программа предоставляет пользователю возможность остановить выполнение объектной программы в указанной им точке и проанализировать содержимое памяти и регистров процессора.