48552 (588566), страница 5

Файл №588566 48552 (Разработка виртуальных лабораторных работ средствами эмулятора Emu8086) 5 страница48552 (588566) страница 52016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 5)

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=5

B=8

C=A+B.

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 тоже самое, только другие числа

B=25

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

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

Конец Программы

Подпрограмма Сложение

C=A+B

Возврат из подпрограммы возвращаемся в то место, откуда вызывали

Конец подпрограммы

В данном примере мы дважды вызвали подпрограмму Сложение, которая сложила два числа, переданные ей в переменных A и B. Результат помещается в переменную С. Когда вызывается подпрограмма, компьютер запоминает с какого места она была вызвана, а затем, когда закончила работу подпрограмма, компьютер возвращается в то место, откуда она вызывалась. Т.о. можно вызывать подпрограммы неопределенное количество раз с любого места.

Команда RET пользуется обычно для возвращения из процедуры. DOS вызывается COM-программы так, что команда RET корректно завершает программу.

DOS при вызове СОМ-файла помещает в стек сегментный адрес программы и ноль, так что RET передает управление на нулевой адрес текущего сегмента, то есть на первый байт PSP. Там находится код команды INT 20H, которая и используется для возвращения управления в DOS. Можно сразу заканчивать программу командой INT 20h, хотя это длиннее на 1 байт.

Следующая строка примера определяет строку данных, содержащую текст “ПРИВЕТ" управляющий символ ASCII возврат каретки с кодом ODh, управляющий символ ASCII перевод строки с кодом 0Ah и символ $ завершающий строку (если мы его уберем, то 21h прерывание продолжит вывод до тех пор, пока не встретится где-нибудь в памяти символ $, на экране мы увидим “мусор). Первое слово (message - сообщение) - название сообщения. Оно может быть любым (например, mess или string и пр).

Управляющие символы (ODh и 0Ah) переводят курсор на первую позицию следующей строки.

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

В качестве дополнительного примера создадим еще одну строку, которую назовем message1. Затем, начиная со строки (9) вставим следующие команды и скомпилируем программу заново.

9

mov dx,offset message1

10

int 21h

11

int 20h

12

message db "Привет", 0dh, 0ah, '$'

13

message1 db "Группа", 0dh, 0ah, '$'

14

end begin

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

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

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

2.3 Откомпилируйте пример №2;

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

2.5 Полученный com-файл запустите в сеансе dos.

2.6 Создайте на языка Pascal программу выводящую на экран слово “Привет" и сравните размеры получаемых файлов (Pascal и Assembler).

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

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

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

3.3 С какой целью в код программы на ассемблере для DOS вводится строка ORG 100h?

3.4 Назначение команды MOV?

3.5 Прерывания 21h и 20h. Назначение?

3.6 Сущность и целесообразность использования команды RET вместо прерывания 20h?

3.6. Символ ‘$’ методика применения?

3.7. Связка “BEGIN: - END BEGIN". Правила применения?

ЛАБОРАТОРНАЯ РАБОТА №3

СТРУКТУРА ИСПОЛНИМЫХ ФАЙЛОВ ТИПА *. EXE.

ПРОСТЫЕ АРИФМЕТИЧЕСКИЕ ДЕЙСТВИЯ НА ЯЗЫКЕ АССЕМБЛЕРА

Цель работы: Изучение принципов составления простейших*. exe программ. Изучение приемов работы с простейшими операторами арифметических действий.

Краткие теоретические сведения (программа типа *. ЕХЕ).

Файлы типа ЕХЕ содержат заголовок, в котором описывается размер файла, требуемый объем памяти, список команд в программе, использующих абсолютные адреса, которые зависят от расположения программы в памяти, и т.д. ЕХЕ-файл может иметь любой размер. Формат ЕХЕ также используется для исполнимых файлов в различных версиях DOS-расширителей и Windows, но со значительными изменениями.

Операционная система DOS не использует расширения для определения типа файла. Первые два байта заголовка ЕХЕ-файла - символы "MZ" или "ZM", и если файл начинается с этих символов и длиннее некоторого порогового значения, разного для разных версий DOS, он загружается как ЕХЕ, если нет - как СОМ.

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

Простой пример ЕХЕ-файла:

. model small

; сегмент стека размером в 256 байт

. stack 100h

; сегмент стека размером в 256 байт

. code

; сегмент кода, который содержит и данные.

Begin:

; метка начала кода программы

mov ax,@data;

; сегментный адрес строки message помещается в DS

mov ds,ax

mov dx,offset string

помещает в регистр DX смещение метки String относительно начала сегмента данных

mov ah,9

; помещаем номер функции DOS "вывод строки (9)" в регистр АН.

int 21h

; функция DOS "вывод строки"

mov ax,4C00h

; завершение программы типа - exe

int 21h

; функция DOS "завершить программу"

. data

; начало сегмента данных

string db "Privet", 0Dh,0Ah,'$'

; cтрока с содержащая выводимые данные.

end begin

; метка окончания кода программы

В примере определяются три сегмента - сегмент стека директивой. STACK размером в 256 байт, сегмент кода, начинающийся с директивы. CODE, и сегмент данных, начинающийся с. DATA. При запуске ЕХE-программы регистр DS уже не содержит адреса сегмента со строкой string (он указывает на сегмент, содержащий блок данных PSP), а для вызова используемой функции DOS этот регистр должен иметь сегментный адрес строки. Команда MOV AX,@DATA загружает в АХ сегментный адрес группы сегментов данных @DATA, a MOV DS,AX копирует его в DS. Программы типа ЕХЕ должны завершаться системным вызовом DOS 4Ch: в регистр АН помещается значение 4Ch, в регистр AL помещается код возврата (в данном примере код возврата 0 и регистры АН и AL загружаются одной командой MOV AX,4C00h), после чего вызывается прерывание 21h.

Простые арифметические операторы.

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

2.1 Сложение.

Команда ADD (Addition - сложение (гл. to add - сложить)) осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды ADD можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду ADD можно использовать для сложения как обычных целых чисел, так и двоично-десятичных (с использованием регистра АХ для хранения результата). Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.

Команда

Назначение

Процессор

ADD приемник, источник

Сложение

8086

Примеры:

mov al,10 - --> загружаем в регистр AL число 10

add al,15 - --> al = 25; al - приемник, 15 - источник

Характеристики

Тип файла
Документ
Размер
5,95 Mb
Учебное заведение
Неизвестно

Список файлов ВКР

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее