Оператор записи данных в память DATA
Данные можно записывать в память напрямую, используя оператор DATA.
Пример:
data 3132
data FFFF
И выполним сборку, нажав Ctrl+F9.
В окне Отладчика мы видим, что процессор распознал введённые данные как две команды:
Mov R3, R2
Stop
Такой процесс преобразования числовых кодов команд в их символьное обозначение называется дисассемблирование (или разборка).
Любая машинная команда в ЛамПанели состоит из целого числа 16-битных слов, то есть из чётного числа байт. Поэтому в окнах отладчика и данных в памяти нумерация ячеек содержит только чётные адреса (команда не может начинаться с ячейки, имеющей нечётный адрес. При этом данные записаны в память как два машинных слова (4 байта).
Рассмотрим окно Данные в памяти. Мы видим, что байты слова 313216 расположены в ней наоборот, – сначала младший 3216, а затем старший 3116.
Кроме того, в правой части окна видно, что эти коды соответствуют символам 21яя.
Все специальные коды (не соответствующие каким-то принятым изображениям символов) обозначены точками.
Таким образом, компьютер, основанный на фоннеймановской архитектуре, не может самостоятельно различить, где данные, а где команды.
Служебный регистр PC (Program Counter register)
Выполним программу из примера в пошаговом режиме. После первого шага в регистр PC записывается 0 – это стартовый адрес, с которого начинается выполнение программы.
В отладчике зелёным цветом выделена первая команда. Она ещё не выполнялась, но будет выполнена на следующем шаге.
После выполнения первой команды в регистр PC записывается число 2 – это начало следующей команды, которая теперь в отладчике выделена зелёным цветом.
Отсюда мы делаем вывод, что регистр PC всегда содержит адрес следующей команды.
Основные выводы:
ü Процессор воспринимает байты, расположенные по определённому адресу как код команды (а не как данные);
ü Программа всегда начинает выполняться некоторого известного адреса, который “вшит” в компьютер и автоматически заносится в регистр PC;
ü Программа останавливается, когда выполняется код FFFF16 – команда STOP.
Обработка данных из оперативной памяти
Для того чтобы обрабатывать данные из оперативной памяти, процессор должен загрузить их в регистры. Поскольку программа и данные расположены в одной области памяти, размещать данные можно сразу после команды STOP.
Пример:
***
stop
d:
data 1234
Здесь метка d нужна для того, чтобы было удобно загружать адрес блока данных в регистр.
Пример:
mov @d, R0; загрузка адреса метки d в регистр R0
Можно считать, что d – это переменная программы. После этого легко загрузить в регистр данные из памяти.
Пример:
mov (R0), R1; загрузка данных в регистр R1, адрес которых записан в регистре R0
Команда (R0) буквально значит следующее: «Значение, находящееся в памяти по адресу, записанному в регистре R0 ».
Это так называемый косвенный способ адресации, когда регистре находится адрес данных, а не конкретное значение.
Аналогично можно изменить содержимое ячейки памяти.
Пример:
mov R2, (R0); запись данных из R2 в ячейку, адрес которой записан в регистре R0
Замечание
Таким образом можно сразу обращаться к любой ячейке памяти, поэтому такой вид памяти называют памятью с произвольным доступом (от англ. RAM – Random Access Memory).