Використання емулятора Emu8086

Надрукуйте ваш код всередині текстової області, і після клацання кнопки [Compile]. Вас запитають про місце, де зберегти компільований файл.

Після успішної компіляції Ви можете клацати кнопку [Emulate], щоб завантажити компільований файл в емуляторі.

Використання емулятора Emu8086 - student2.ru

Якщо Ви хочете завантажити ваш код в емулятор, тільки клацніть кнопку "Emulate". Використання емулятора Emu8086 - student2.ru

Але Ви також можете використовувати емулятор, щоб завантажити executables, навіть якщо Ви не маєте первісного вихідного тексту. Виберіть "Show Emulator", меню "Emulator".

Використання емулятора Emu8086 - student2.ru

Спроба, завантажувати файли від папки "MyBuild". Якщо немає ніяких файлів в "MyBuild" папці, повертають вихідного редактору, вибирають Samples від меню File, завантажують будь-який зразок, вибирають і потім завантажуються в емулятор.

Використання емулятора Emu8086 - student2.ru

В пам'яті перераховують перший рядок - зсув, другий рядок - значення hexadecimal, третій рядок - десяткове значення, і останній рядок - значення символу ASCII.

Кнопка [Single Step] виконує команди, один за іншим зупиняють після кожної команди.

[Run] кнопка виконує команди один за іншим з затримкою, встановленої затримкою кроку між командами.

Двічі клацніть на текстових полях регістра, відкривається вікно "Extended Viewer" зі значенням того регістра, перетвореного до всіх можливих форм. Ви можете змінювати значення регістра безпосередньо в цьому вікні.

Двічі клацніть на елементі списку пам'яті, відкривається "Extended Viewer" зі значенням WORD, завантаженим зі списку пам'яті у вибраному місці розташування. Менш істотний байт - в молодшому адресу: LOW BYTE завантажений від обраної позиції і HIGH BYTE від наступного адреси пам'яті. Ви можете змінювати значення слова пам'яті безпосередньо у вікні "Extended Viewer", Ви можете змінювати значення регістрів в часі виконання, друкуючи по існуючим значенням.

Кнопка [Flags] дозволяє Вам розглядати і змінювати прапорці на часі виконання.

Компіляція кода Асемблера

Використання емулятора Emu8086 - student2.ru

Надрукуйте ваш код всередині текстової області і клацніть кнопку [Compile]. Вас запитають, де зберегти відкомпільований файл. Після завершення компіляції ви можете натиснути кнопку [Emulate] для завантаження відкомпілювати файлу в емулятор.

Директиви, що визначають тип виконуваного файлу:

#MAKE_COM#

#MAKE_BIN#

#MAKE_BOOT#

#MAKE_EXE#

Ви можете вставити ці директиви в вихідний код для визначення потрібного вам типу здійснимих файлу. У тому випадку, якщо компілятор не знайде жодної з цих директив, він запитає у вас тип файлу перед його створенням.

Опис типів здійснимих файлів:

#MAKE_COM# - самий старий і самий простий формат здійснимих файлу. Такі файли завантажуються з префіксом 100h (256 байтів). Вибрати СОМ Template з меню New, якщо ви плануєте компілювати COM-файл. Директива компілятора ORG 100h повинна бути додана перед кодом. Виконання завжди починається з першого байта файлу. Підтримується командним рядком DOS і Windows.

#MAKE_EXE# - більш "просунутий" формат здійснимих файлу. Не обмежені розмір і кількість сегментів. Сегмент стека повинен бути визначений в програмі. Ви можете вибрати EXE Template з меню New для створення простої ЕХЕ-програми з певними сегментами Даних, Стека і Кода. Точка входу (де починається виконання) визначається програмістом. Підтримується командним рядком DOS і Windows.

#MAKE_BIN# - простий здійснимих файл. Ви можете визначити значення всіх регістрів, сегмент і зсув для області пам'яті, куди цей файл буде завантажений. Якщо завантажити файл "MY.BIN" в емулятор, він буде видний для файлу - "MY.BINF" і завантажиться файл "MY.BIN" в місце розташування, визначене в файлі "MY.BINF". Регістри також встановляться з урахуванням інформації з цього файлу (відкрийте цей файл в редакторі для зміни або вивчення). У тому випадку, якщо емулятор не знайде файл "MY.BINF", буде використовуватися поточні значення регістрів і файл "MY.BIN" завантажиться в поточний CS: IP.

Виконання починається зі значення в CS: IP.

Цей тип файлу унікальний для Emu8086.Файл

".BINF створюється автоматично компілятором, якщо він знаходить директиву #MAKE_BIN#.

ПОПЕРЕДЖЕННЯ! Якщо файл ".binf" існує, то він буде перезаписаний!

Використання емулятора Emu8086 - student2.ru

Значення повинні бути шістнадцятирічними! Якщо ці значення не визначені, то вони встановлюються за замовчуванням:

LOAD_SEGMENT = 0100 LOAD_OFFSET = 0000 CS = ES = SS = DS = 0100 IP = 0000 Якщо LOAD_SEGMENT і LOAD_OFFSET не визначені, то використовуються значення CS і IP, і навпаки.

Якщо значення Load to offset не дорівнює нулю (0000), то ORG???? h повинна бути додана в файл. BIN, де???? h - це зміщення для завантаження. Це повинно бути зроблено для того, щоб компілятор міг обчислити правильні адреси.

#MAKE_BOOT# - ця директива копіює першу доріжку дискети (завантажувальний сектор).

Ви можете записати завантажувальний сектор віртуального дисковода (FLOPPY_0) через меню емулятора:[Virtual Drive] -> [Write 512 bytes at 7C00 to Boot Sector] Спочатку ви повинні відкомпілювати ". Boot"-файл, а потім завантажити його в емулятор (див. "micro-os_loader. Asm" і "micro-os_kernel. Asm "в розділі" Samples ").

Потім виберіть у меню [Virtual Drive] -> [Boot from Floppy], щоб завантажити емулятор з віртуального дисковода.

Потім, якщо вам цікаво, ви можете записати віртуальну дискету на реальну дискету і завантажити з неї ваш комп'ютер. Я рекомендую використовувати "RawWrite for Windows" з: http://uranus.it.swin.edu.au/~jn/linux/rawwrite.htm (врахуйте, що "micro-os_loader.asm" не використовує MS-DOS-сумісний завантажувальний сектор, так що краще використовувати чисту дискету, хоча вона повинна бути відформатована IBM (MS -DOS)).

Директива компілятора ORG 7C00h повинна бути додана перед кодом, якщо комп'ютер починає завантажуватися з першої доріжки дискети на адресу 0000: 7C00.

Розмір. BOOT-файлу повинен бути менше 512 байтів (обмежений розміром сектора дискети).

Виконання завжди починається з першого байта файлу. Цей тип файлу унікальний для емулятора Emu8086.

Обробка помилок

Компілятор виводить звіт про помилки в окремому вікні:

Використання емулятора Emu8086 - student2.ru

MOV DS, 100 - це неприпустима команда, тому що в сегментний регістр не можна встановлювати безпосереднє значення - повинні використовуватися регістри загального призначення:

MOV AX, 100 MOV DS, AX MOV AL, 300 - це неприпустима команда, тому регістр AL має тільки 8 бітів, і його максимальне значення 255 (або 11111111b), а мінімальне - 128.

Компілятор робить кілька проходів перед генерацією правильного машинного коду. Якщо він знаходить помилку і не виконує необхідну кількість проходів, він може видати неправильне повідомлення про помилку. Наприклад:

# make_COM #

ORG 100h

MOV AX, 0

MOV CX, 5

m1: INC AX

LOOP m1; це не справжня помилка!

MOV AL, 0FFFFh; помилка тут.

RET

Список сгенерованих помилок:

(7) Condition Jump out of range (Умова переходу за межами діапазону)!: LOOP m1 (9) Wrong parameters (Неправильні параметри): MOV AL, 0FFFFh (9) Operands do not match (Операнди не відповідають): Second operand is over 8 bits (Другий операнд більше 8 бітів)! Перше повідомлення (7) - неправильне. Компілятор не закінчив обчислення зміщень для міток, тому він думає, що зсув мітки m1 - це 0000. Ця адреса лежить за межами діапазону, так як ми починаємо зі зміщення 100h.

Внесіть виправлення в цей рядок: MOV AL, 0FFFFh (AL не може містити значення 0FFFFh). Це усуне обидві помилки! Наприклад:

# Make_COM #ORG 100h

MOV AX, 0

MOV CX, 5m1: INC AX

LOOP m1; той самий код без помилок!

MOV AL, 0FFh; всі!

RET

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

asm - цей файл містить оригінальний вихідний код, який був використаний для створення виконуваного файлу.

debug - цей файл містить інформацію, яка дозволяє емулятор вибирати рядки оригінального вихідного коду під час виконання машинного коду.

symbol - Таблиця символів. Вона містить інформацію, яка дозволяє відображати вікно "Variables" (Змінні). Це текстовий файл, так що ви можете подивитися його з текстового редактора.

binf - цей файл містить інформацію, яка використовується емулятором для завантаження BIN-файлу в зазначене місце розташування, і установки значень регістрів попередніх виконанню (створюється тільки в тому випадку, якщо здійснимих файл - це BIN-файл).

Наши рекомендации