Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС Лабораторная работа № 3.doc
Скачиваний:
59
Добавлен:
02.05.2019
Размер:
2.02 Mб
Скачать

Синтаксис редактора

Число строк и длина строки в редакторе не ограничены. Ограничение накладывается на размер кода откомпилированной программы и не может превышать 64 Кбайта. Шрифт, его размер и другие параметры можно изменять по своему усмотрению. При записи программы на Ассемблере возможно применение как строчных, так и заглавных букв. В тексте допускается присутствие пустых строк. Разделители (пробелы и символы табуляции) можно ставить в любом месте, кроме тех случаев, которые указаны ниже. Количество последовательности разделителей не ограничено, то есть эту последовательность можно считать как один разделитель (пробел или символ табуляции). Часть строки, находящаяся за символом точка с запятой ";", считается пояснением команды, и не участвует в формировании машинного кода процессора.

Метка должна стоять в начале строки. Название метки может содержать любые символы кроме пробела и символа табуляции, однако рекомендуется задавать названия меток, используя только латинские символы и арабские цифры, причем для избежания непредсказуемой работы программы не следует начинать название метки с цифры. Конец метки определяется по символу двоеточие ":". Разделители перед меткой и после метки допускаются в любом количестве. В программе метка должна быть описана только один раз, количество же ссылок на эту метку не ограничено. Ссылка в команде на некоторую метку осуществляется путем написания в качестве операнда названия этой метки. Метка может находиться как до, так и после ссылки на нее.

Команда должна быть написана в соответствии с языком Ассемблера данного микропроцессора. Разделители перед командой и после команды допускаются в любом количестве. Между мнемоникой команды и первым операндом обязательно должен стоять хотя бы один разделитель (пробел или символ табуляции), разделяющий мнемонику команды от операнда. Если в команде присутствует второй операнд, то его необходимо отделить от первого операнда запятой. Разделители перед запятой и после нее допускаются в любом количестве. После команды не допускается присутствие других символов, кроме пояснения и разделителей.

В тексте программы имеется возможность задавать численные значения операндов в десятичной, шестнадцатиричной и двоичной системах счисления. При этом однобайтное число должно лежать в диапазоне от 0 до 255 включительно, а двухбайтное – от 0 до 65535 также включительно. При задании числа в шестнадцатиричной системе счисления сразу после числа ставится буква "h". При задании числа в двоичной системе счисления сразу после числа ставится буква "b". При отсутствии этих символов подразумевается десятичная система счисления.

Эмулятор программы

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

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

Меню эмулятора содержит следующие пункты:

  • Команды. Список всех команд вызываемых при просмотре или отладки работы программы.

    • Выполнить до курсора. Выполнение программы до выделенной строки в поле команд (F4).

    • Выполнить одну команду. Выполнение одной команды программы (F7).

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

    • Запустить программу. Запуск программы до ее завершения (F9).

    • Прервать. Остановка выполнения программы (Esc) при запуске ее до завершения. Это единственное действие, которое доступно во время отработки команд программы, оно позволяет в любой момент прерват выполнение программы процессором. При остановке выполнения программы курсор команды будет показывать на следующую выполняемую команду.

    • Установить точку. Установка точки останова в выделенной строке в поле команд (Ctrl + F8). При этом возможно установление только одной точки останова. Установка точки останова в строке, где она уже установлена, приведет к удалению из этой строки точки останова. Если точка останова устанавливается в другой строке, то предыдущая точка удаляется.

    • Выход. Выход из эмулятора в текстовый редактор (Alt + x, Alt + F4).

  • Помощь. Содержит единственное подменю Помощь, которое выводит помощь по работе с эмулятором.

Эмулятор содержит следующие поля:

  • Поле команд. В первом столбце указывается курсор выполняемой команды. Также здесь указывается точка останова (буквой "B"). Во втором столбце отображается адрес команды. В третьем столбце отображается код команды. Наконец, в последней строке отображается сама команда, при этом все числа и адреса представлены в шестнадцатиричной системе счисления. В этом поле нельзя произвести никаких изменений.

  • Поле регистров. В первом столбце содержатся названия регистров микропроцессора. В последующих столбцах отображается содержимое регистров в шестнадцатиричной (h), десятичной (d) и в двоичной (b) системах счисления.

  • Поле указателей. В первом столбце содержатся два названия: счетчик команд (PC) и указатель стека (SP). В последующих столбцах отображается содержимое указателей в шестнадцатеричной и десятичной системах счисления.

  • Поле флагов. В первой строке содержатся названия флагов, а во второй – их значения. Флаги могут принимать только значения 0 или 1.

  • Поле параметров. В первом столбце содержатся два названия: стартовый адрес и задержка. В последующих столбцах отображается содержимое параметров в шестнадцатеричной и десятичной системах счисления. Стартовый адрес изменяет счетчик команд на указанный адрес, а задержка нужна для замедления выполнения команды.

  • Поле портов. В первом столбце содержатся номера портов в шестнадцатеричном виде. В последующих столбцах отображается содержимое портов в шестнадцатеричной, десятичной и в двоичной системе счисления.

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

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

Ввод всех редактируемых значений, кроме значений флагов регистра признаков, осуществляется следующим образом:

  1. Сначала левой кнопкой мыши либо клавишей табуляции (Tab, Shift + Tab) и клавишами перемещения курсора (←, →, ↑, ↓) выбирается редактируемый параметр поля.

  2. Затем нажимается клавиша Enter или левая кнопка мыши, после чего осуществляется ввод значения редактируемого параметра.

  3. Ввод завершается только нажатием клавиши Enter. После ввода значения производится проверка. Если ввод неправильный, то остается старое (последнее, правильно введенное) значение.

Редактирование флагов производится иначе. Здесь для изменения значения некоторого флага с 0 на 1 или наоборот, с 1 на 0, достаточно нажать левую кнопку мыши на этом флаге. При этом не следует пользоваться клавишами ←, →, ↑ и ↓, т. к. их нажатие приводит не только к выбору редактируемого флага, но и к его изменению на противоположное значение, что затрудняет процесс редактирования данным способом.

Прогр. 1. 

LXI H, 0100h

;В HL адрес ячейки памяти.

MVI M, 120

;Записать байт данных в ячейку с адресом в

; HL.

MVI B, 24

;Записать в В байт данных.

MOV A, B

;Записать содержимое регистра B в Акк.

ADD M

;Сложить Акк. с байтом по адресу в HL.

JPO LAB_1

;Если не установлен флаг P, то идти на

; LAB_1.

DCR B

;Декрементация регистра B.

INX H

;Инкрементация регистровой пары HL.

CALL PROC_1

;Переход на подпрограмму PROC_1.

MOV M, B

;Записать содержимое регистра B в память по

; адр. в HL.

SUB B

;Вычесть из Акк. байт в B и занести

; результат в Акк.

LAB_1:

HLT

;Выход из программы.

PROC_1:

MOV A, B

;Записать содержимое регистра B в Акк.

RLC

;Сдвиг Акк. влево.

MOV B, A

;Записать содержимое Акк. в регистр B.

RET

;Возврат из подпрограммы.