Для выработки первоначальных навыков обращения с системой команд изучаемого микропроцессора предлагается работа с его программной моделью, написанной на языке Delphi и предназначенной для работы в операционной системе MS Windows. Модель включает в себя файлы i486.exe и i486.hlp. При запуске исполняемого файла на экране появится главное окно программы, где отображаются оперативная память, регистры процессора, индикаторы портов 0 и 1, а также редактор для набора программ. Для управления моделью предусмотрено меню и кнопки быстрого доступа к наиболее важным функциям. С помощью одной из команд этого меню можно получить доступ к справочной информации (HELP), где достаточно подробно описана работа с моделью. Работа ведется с применением языка программирования, представляющего собой упрощенный ассемблер.
Как известно, ассемблером называется машинно-зависимый транслятор, преобразующий символьную (мнемоническую) запись команд в соответствующие двоичные команды, "понятные" процессору. Кроме символьных команд, язык ассемблера обычно включает в себя директивы и метки. Примеры меток (последовательности символов, после которых ставится двоеточие) уже встречались нам выше. Метки используются для организации переходов либо циклов. В рассматриваемой модели метку можно использовать только с целью применения в команде LOOP.
Директивы используются, в частности, для определения данных. Выше также встречались примеры директив DB (определить байт) и DW (определить слово). Первая из них может также использоваться для определения символьных строк. Перед директивой обычно ставится символическое имя определяемых данных (для ссылки на них методом прямой адресации), а после директивы указываются нужные байты, слова, строки.
Рассмотрим примеры программ для работы с моделью.
1. Записать во все РОН константу 5.
MOV AX, 5
MOV BX, AX
MOV CX, AX
MOV DX, AX
HLT
Набрав эту программу в редакторе модели, оттранслируем и запустим ее. В регистрах общего назначения появится изображение константы 5.
2.Вычислить сумму 1+2+…+19+20 и вывести ее на индикатор порта 0.
Удобно программировать вычисление этой суммы в обратном порядке, т.е. начиная с 20 – тогда можно воспользоваться регистром с убывающим содержимым. В данном случае нам подходит цикл LOOP со счетчиком в CX – ведь его содержимое как раз уменьшается на каждой итерации цикла. С целью продемонстрировать применение директивы DW определим в программе константу 20 именно с ее помощью.
B DW 20
MOV AX, 0
MOV CX, B
MET:
ADD AX, CX
LOOP MET
OUT 0, AX
HLT
3.Вывести на индикатор порта 0 степени двойки от 1 до 128. Это пример прежде всего на использование команды сдвига влево. Каждый такой сдвиг равнозначен умножению на 2.
MOV AX, 1
MOV CX, 8
MET:
OUT 0, AX
SHL AX, 1
LOOP MET
HLT
Назад | Содержание | Вперёд |