- ознакомление с основными возможностями и интерфейсом программы-эмулятора EMU8086;
- получение начальных знаний по программированию на языке ассемблер для процессоров семейства х86.
Перечень используемого оборудования
2.1 Программа EMU8086.
2.2 ПК.
Краткие теоретические сведения
Программа Emu8086 представляет собой эмулятор работы процессора (совместимого с Intel и AMD) со встроенным ассемблером и предназначена для написания программы на языке ассемблер, совместимом с процессорами i8086 и старше, компилирования данной программы, загрузки ее в память и визуального наблюдения результата ее работы. Эмулятор исполняет программу в пошаговом режиме также как и реальный процессор и позволяет просматривать сведения о состоянии внутренних регистров МП, стека, памяти, переменных и флагов во время выполнения программы. Пакет программ Emu8086 включает также несколько внешних виртуальных устройств: робот, шаговый двигатель, LED дисплей, светофор и т.д.
Задание
4.1 Запустите программу EMU8086 двойным щелчком ПК мыши на соответствующий ярлык на рабочем столе. В открывшемся меню выберите пункт New > Empty workspace. В открывшемся редакторе исходного кода наберите следующую программу:
; Убрать мигающий курсор и задействовать все 16 цветов
mov ax, 1003h
mov bx, 0
int 10h
; Установка сегментного регистра:
mov ax, 0b800h
mov ds, ax
; Печать "Privet!"
; Первый байт - код символа в ascii, второй байт - код для цвета.
mov [02h], 'P'
mov [04h], 'r'
mov [06h], 'i'
mov [08h], 'v'
mov [0ah], 'e'
mov [0ch], 't'
mov [0eh], '!'
; Задать цвет символов:
mov cx, 7 ; число символов.
mov di, 03h ; начинать с байта, следующего за 'П'
c: mov [di], 11101100b ; светло красный (1100) на желтом фоне (1110)
add di, 2 ; загрузить код следующего символа в видеопамять.
loop c
; ждать нажатия любой клавиши:
mov ah, 0
int 16h
ret
Этот пример выводит на экран надпись "Privet!". При записи непосредственно в vga область видеопамяти. Первый байт представляет собой символ в коде ascii, следующий за ним байт - это атрибут символа. Меняя этот байт, можно изменять цвет символа, даже если он уже виден на экране. Атрибут - это 8-битное значение. Старшие 4 бита - цвет фона, младшие 4 бита - цвет символа.
hex bin цвет
0 0000 черный
1 0001 синий
2 0010 зеленый
3 0011 голубой
4 0100 красный
5 0101 сиреневый
6 0110 коричневый
7 0111 светло серый
8 1000 темно серый
9 1001 светло синий
a 1010 светло зеленый
b 1011 светло голубой
c 1100 светло красный
d 1101 светло сиреневый
e 1110 желтый
f 1111 белый
Переведенная в машинные коды программа занимает в памяти около 100 байт, т.к. она не использует никаких прерываний и включает всего одну метку для раскрашивания символов. Остальная часть программы – это обычный машинный код, записываемый непосредственно в видеопамять. Размер записываемого слова в данном случае 21 байт.
Для запуска программы нажмите кнопку Emulate или клавишу F5. Если вы не допустили ошибок при наборе, то автоматически запустится эмулятор.
Далее можно нажать single step (или F8) для пошагового выполнения программы и наблюдения результата ее работы, либо можно нажать step back (или F6) для возврата к предыдущей команде.
4.2Приведенный способ вывода строки на экран не является единственным и тем более самым простым. Наберите в редакторе следующую программу:
При ассемблировании данная программа занимает всего около 30 байт. Она гораздо меньше, т.к. в отличии от предыдущей программы все символы выводятся в автоматическом режиме, с использованием стандартных функций прерываний операционной системы.
Запустите набранную программу и наблюдайте результат ее работы.
4.3Измените содержание выводимой фразы сначала по пункту 4.1, затем по 4.2, используя один из следующих вариантов (цвета задайте для каждой буквы отдельно, по своему усмотрению)