2 какова структура ассемблерной программы

Аннотация: Рассматривается парадигма низкоуровневого программирования на ассемблере. Эта парадигма нацелена на учет основных особенностей компьютерных архитектур. Описаны основные методы адресации памяти. Дано определение языково-ориентированной абстрактной машины. Изучается понятие абстрактной машины (secd) для определения операционной семантики языка программирования по Венской методике

Низкоуровневое программирование успешно при детальном знакомстве с архитектурой компьютера, что в конечном счете приводит к ее пониманию. Принципы и способы программирования в общем не зависят от языка. Главным требованием является умение мыслить логически.

Ассемблер отличается от компилятора меньшей сложностью исходного языка, перевод с которого в машинный язык можно выполнить «один-в-один». Ассемблер часто сопровождается возможностью дизассемблирования, что отличает его от большинства других языков программирования. Изучить язык ассемблера проще, чем любой язык высокого уровня . Знание ассемблера помогает понимать код программы , подготовленной на других языках.

FASM. Установка FASM. Структура программы на ассемблере. Урок 1

Архитектура компьютера часто определяется как множество ресурсов, доступных пользователю. Это система команд , общие регистры, слово состояния процессора и адресное пространство . Процесс перевода программы с языка ассемблера в язык машинных команд называют ассемблированием.

Процесс ассемблирования заключается в следующим:

  • Резервирование памяти для последовательности команд, образующих ассемблируемую программу.
  • Сопоставление используемых идентификаторов с адресами в памяти.
  • Отображение ассемблерных команд и идентификаторов в их машинные эквиваленты.

Для реализации такого процесса требуется счетчик адресов и таблица идентификаторов.

Программист не знает абсолютных адресов ячеек памяти, занятых для хранения констант, команд и промежуточных результатов вычислений, но обычно предполагается, что последовательно написанные команды будут расположены в последовательных ячейках памяти.

Кроме символических представлений команд ассемблерная программа содержит описания распределяемой памяти и директивы управления ассемблированием. Обычно выделена точка входа в программу из операционной системы.

Программирование на ассемблере подразумевает знание специфики системы команд процессора, методов обслуживания устройств и обработки прерываний. Система команд может быть расширена микропрограммами и системными вызовами в зависимости от комплектации оборудования и операционной системы. Это влияет на решения по адресации памяти и коммутации комплекта доступных устройств. Но есть и достаточно общие соглашения о представлении и реализации средств обработки информации на уровне машинного кода [ [ 1 ] , [ 20 ] , [ 36 ] , [ 55 ] , [ 56 ] , [ 71 ] , [ 72 ] ].

Структура кода программы и его свойства:

  • Перемещаемость. Удобно, чтобы код программы был устроен так, что его можно расположить по любому абсолютному адресу.
  • Листание страниц памяти. Соотношение между адресуемой и реально доступной памятью может требовать пересмотра в процессе выполнения программы.
  • Зависимость от данных. Программа должна учитывать готовность и обновление данных, особенно в случае обмена информацией через порты или буферы устройств.
  • Динамика размещения. Программа может размещаться в памяти пошаговым образом, методом раскрутки , с использованием динамической оптимизации, учитывающей статистику реального использования ее составляющих.

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

СТРУКТУРА ПРОЕКТА | СТРУКТУРА И ПОРЯДОК ВЫПОЛНЕНИЯ ПРОГРАММЫ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ Урок #2

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

Число слов, отводимое ассемблером под одну символическую команду, зависит не только от собственно кода команды, но и от метода адресации операндов, а возможно и от других аспектов кодирования программ и данных, обсуждение которых здесь не предусмотрено. Достаточно констатировать, что программа при ассемблировании распадается на конечные последовательности команд K1 . Kn , которым сопоставляются конечные интервалы машинных слов W1 . Wm(a) в зависимости от а — системы аспектов кодирования.

Читайте также:
Как пользоваться программой icon to

[K1 . Kn] -> [W1 . Wm(a)]

Фактически операндная часть команды — это адреса, специальные регистры, сумматоры, значения в общей памяти, шкала прерываний и состояний или что-нибудь другое, специфичное для конкретной архитектуры.

В зависимости от команды используются разные методы адресации операндов:

  • неявная — команда сама «знает», где и что она обрабатывает, где берет данные и куда разместит результат;
  • непосредственная — операнд расположен непосредственно в команде;
  • прямые адреса — код адреса размещен в поле операнда;
  • индексируемые адреса — один из операндов используется как индекс при вычислении адреса других операндов;
  • базируемых (по регистру) — указан базовый регистр для пересчета адресов операндов;
  • относительные (по текущей позиции) — адресация учитывает адрес размещения команды;
  • косвенные (через промежуточное слово) — операнд указывает на слово, хранящее адрес значения;
  • модифициуемые (по значению-регистру) — один операнд указывает на слово, хранящее значение, модифицирующее адрес другого операнда;
  • стек — операнд, доступ к которому подчинен дисциплине стека — «первый пришел — последний ушел».

Источник: intuit.ru

Характеристика структуры файла типа *.com?

Практическая работа №2

1)Запустил программу с кодом из примера 1.

2) Откомпилирывал пример №2

Практическая работа 2 ДТПА

3) Сохранил Программу.

4) Сравнение. Весит больше чем Acctmbler.

1 Характеристика структуры файла типа *.com?

Файлы типа СОМ содержат только скомпилированный код без какой-либо дополнительной информации о программе Весь код, данные и стек такой полагаются в одном сегменте и не могут превышать 64 Кб.

2 Какова структура ассемблерной программы?

Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами. Программа может состоять из одного или нескольких таких блоков-сегментов. Сегменты программы имеют определенное назначение, соответствующее типу сегментов: кода, данных и стека. Названия типов сегментов отражают их назначение.

Деление программы на сегменты отражает сегментную организацию памяти процессоров Intel (архитектура IA-32). Каждый сегмент состоит из совокупности отдельных строк, в терминах теории компиляции называемых предложениями языка.

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

Для языка ассемблера предложения, составляющие программу, могут представлять собой синтаксические конструкции четырех типов.

· Команды (инструкции) представляют собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд процессора.

· Макрокоманды — это оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями.

· Директивы — указание транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении.

· Комментарии содержат любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

· Понятие о метасинтаксических языках

Источник: helpiks.su

Разработка виртуальных лабораторных работ средствами эмулятора Emu8086 (стр. 6 из 21)

Из-за своей специфики, а также по традиции, для программирования на языке ассемблера нет никаких сред-оболочек типа Turbo C, Turbo Pascal и т.д. Тут приходится пользоваться «утилитами командных строк», как 30 лет назад. Весь процесс технического создания ассемблерной программы можно разбить на 4 шага (исключены этапы создания алгоритма, выбора структур данных и т.д.).

Набор программы в текстовом редакторе и сохранение ее в отдельном файле. Каждый файл имеет имя и тип, называемый иногда расширением. Тип в основном используется для определения назначения файла. Например, программа на C имеет тип C, на Pascal — PAS, на языке ассемблера — ASM.

Обработка текста программы транслятором. На этом этапе текст превращается в машинный код, называемый объектным. Кроме того, есть возможность получить листинг программы, содержащий кроме текста программы различную дополнительную информацию и таблицы, созданные транслятором. Тип объектного файла — OBJ, файла листинга — LST. Этот этап называется ТРАНСЛЯЦИЕЙ.

Читайте также:
Программа которая печатает конверты

Обработка полученного объектного кода компоновщиком. Тут программа «привязывается» к конкретным условиям выполнения на ЭВМ. Полученный машинный код называется выполняемым. Кроме того, обычно получается карта загрузки программы в ОЗУ. Выполняемый файл имеет тип EXE, карта загрузки — MAP.

Этот этап называется КОМПОНОВКОЙ или ЛИНКОВКОЙ.

Запуск программы. Если программа работает не совсем корректно, перед этим может присутствовать этап ОТЛАДКИ программы при помощи специальной программы — отладчика. При нахождении ошибки приходится проводить коррекцию программы, возвращаясь к шагу 1. Таким образом, процесс создания ассемблерной программы можно изобразить в виде следующей схемы. Конечной целью, напомним, является работоспособный выполняемый файл HELLO. EXE.

1.4 Особенности создания ассемблерной программы в среде эмулятора EMU8086

Этот программный продукт содержит все необходимое для создания программы на языке Assembler.

Пакет Emu8086 сочетает в себе продвинутый текстовый редактор, assembler, disassembler, эмулятор программного обеспечения (Виртуальную машину) с пошаговым отладчиком, примеры.

В процессе выполнения программы мы можем наблюдать программные регистры, флаги и память, АЛУ показывает работу центрального процессора.

Встроенная виртуальная машина полностью блокирует обращение программы к реальным аппаратным средствам ЭВМ, накопителям памяти, это делает процесс отладки намного более легкой

1.5 Правила оформления ассемблерных программ

При наборе программ на языке ассемблера придерживайтесь следующих правил:

директивы набирайте большими буквами, инструкции — малыми;

пишите текст широко — не скупердяйничайте;

не выходите за край экрана, т.е. не делайте текст шире 80 знаков — его не удобно будет редактировать и печатать;

для отступов пользуйтесь табуляцией (клавиша TAB);

блоки комментариев задавайте с одинаковым отступом. Оптимальной считается такая строка:

Количество табуляций перед комментарием определяется длиной аргументов команды и может быть от 1 до 3. По мере знакомства с синтаксисом языка будут приводиться дополнительные правила.

2. Задание для выполнения

2.1 Запустить эмулятор EMU8086.

2.2 Пользуясь правилами оформления ассемблерных программ, исправьте слова «Please Register.» на любые понравившиеся (Не забудьте заключить их в апострофы).

2.3 Запустите приложение, нажав кнопку ‘Emulate’ или клавишу F5.

2.4 Запустите полученный код на выполнение, используя кнопку “RUN” или нажмите функциональную клавишу F9.

2.5 Откомпилируйте программу. Вернитесь в главное окно формы, предварительно закрыв все открытые окна, далее нажмите кнопку “Compile”.

2.6 Полученный com-файл запустите во встроенной командной строке WINDOWS 98 на выполнение или запустите сеанс dos в total commander’e.

2.7 Поэкспериментируйте с другими примерами которые открываются при нажатие клавиши “Samples” в главном окне эмулятора.

2.8 Ознакомитесь со встроенной в эмулятор EMU8086 справкой. В ней содержится вся необходимая информация для работы с программой, азы написания программ на языке assembler и др.

3. Контрольные вопросы

3.1 Каковы основные отличия ассемблерных программ от ЯВУ?

3.2 Какова структура ассемблерной программы?

3.3 В чем отличие инструкции от директивы?

3.4 Каковы правила оформления программ на языке ассемблера?

3.5 Каковы этапы получения выполняемого файла?

3.6. Для чего нужен этап отладки программы?

3.7. Опишите основные моменты создания исполняемого файла и эмуляции работы программы?

3.8. Каковы шаги технического создания ассемблерной программы в программах TASM и MASM?

3.9 Основные возможности эмулятора EMU8086?

3.10 Методы борьбы с зависанием в DOS’e?

Лабораторная работа № 2

РАЗРАБОТКА ПЕРВОЙ ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА

Цель работы: Знакомство со структурой ассемблерной программы, создание первой программы на языке ассемблера.

Структура ассемблерной программы

Чтобы программа выполнилась любой ОС, она должна быть скомпилирована в исполнимый файл. Основные два формата исполнимых файлов в DOS — СОМ и ЕХЕ.

Файлы типа СОМ содержат только скомпилированный код без какой-либо дополнительной информации о программе Весь код, данные и стек такой полагаются в одном сегменте и не могут превышать 64 Кб.

. model tiny
. code
org 100h
begin:
mov ah, 9
mov dx,offset message
int 21h
ret
message db «Привет», 0dh, 0ah, ‘$’
end begin
Читайте также:
Типы программ по русскому языку

Рассмотрим исходный текст программы, чтобы понять, как она работает.

Первая строка определяет модель памяти TINY, в которой сегменты кода, данных и стека объединены. Эта модель предназначена для создания файлов типа СОМ.

В DOS для формирования адреса используется сегмент и смещение. Для формирования адреса строки «ПРИВЕТ» используется пара регистров DS (сегмент) и DX (смещение). При загрузке *.com-программы в память, все сегментные регистры принимают значение равное тому сегменту, в который загрузилась наша программа (в т. ч. и DS). Поэтому нет необходимости загружать в DS сегмент строки (он уже загружен).

Директива. CODE начинает сегмент кода, который в нашем случае также должен содержать и данные.

ORG 100h устанавливает значение программного счетчика (IP) в 100h, потому что при загрузке СОМ-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.

Метка BEGIN: располагается перед первой командой в программе и будет использоваться в директиве END (Begin — англ. начало; end — конец), чтобы указать, с какой команды начинается программа.

Вообще вместо слова BEGIN можно было бы использовать что-нибудь другое. Например, START:. В таком случае, нам пришлось бы и завершать программу END START.

Строки (5) — (7) выводят на экран сообщение “ПРИВЕТ”.

Рассмотрим вкратце о регистрах процессора.

Регистр процессора — это специально отведенная память для хранения какого-нибудь числа.

Если мы хотим сложить два числа, то в математике запишем так:

A, B и C — это своего рода регистры (если говорить о компьютере), в которых могут хранится некоторые данные. А=5 можно прочитать как: Присваиваем А число 5.

Для присвоения регистру какого-нибудь значения, в Ассемблере существует оператор mov (от англ. move — загрузить). Команда MOV АН,9 помещает число 9 в регистр АН — номер функции DOS «вывод строки».

Команда MOV DX, OFFSET MESSAGE помещает в регистр DX смещение метки MESSAGE относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода.

OFFSET (по-английски — это смещение). Когда, при ассемблировании, Ассемблер дойдет до этой строки, он заменит OFFSET MESSAGE на АДРЕС (смещение) этой строки в памяти. Если мы запишем OFFSET MESSAGE (хотя, правильнее будет MOV DX, WORD OFFSET MESSAGE), то в DX загрузится не адрес (смещение), а первые два символа нашей строки (в данном случае «Пр»). Так как DX — шестнадцатиразрядный регистр, в него можно загрузить только два байта (один символ всегда один байт).

Команда INT 21H вызывает системную функцию DOS (int от англ. interrupt — прерывание). Можно заменить строку INT 21H на INT 33, программа будет работать корректно. Однако в Ассемблере принято указывать номер прерывания в шестнадцатеричной системе.

Прерывание MS-DOS — это своего рода подпрограмма (часть MS-DOS), которая находится постоянно в памяти и может вызываться в любое время из любой программы.

Эта команда — основное средство взаимодействия программ с операционной системой. В примере вызывается функция DOS номер 9 — вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS: DX, до первого встречного символа $. При запуске СОМ-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был подготовлен предыдущей командой.

Рассмотрим вышесказанное на примере (мелким шрифтом выделим примечания):

Программа сложения двух чисел

A=5 в переменную A заносим значение 5

B=8 в переменную B значение 8

Вызов подпрограммы Сложение

теперь С равно 13

A=10 тоже самое, только другие числа

Вызов подпрограммы Сложение

Источник: smekni.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru