§ Базовые сведения

В данном случае ЛИС — это Легкая Информационная Система, процессор, который имеет небольшое количество инструкции. Особенность моего процессора:
  • Тип — CISC
  • Скорость — низкая
  • Разрядность — 32 бита
  • Шина данных — 8 бит
  • Количество регистров — 256 регистров
  • Размер стека — от 256 элементов, 32х битный
  • Группы инструкции — перемещения, арифметико-логические, сдвиговые, условные и безусловные переходы, стековые, умножение и деление
  • Операции — регистр-регистр
  • Защищенный режим — как повезёт
  • Доступ к портам — осуществляется через доступ к памяти
Задача подобного процессора заключается в том, чтобы сделать достаточно простой набор инструкции, с помощью которого можно что-то программировать. Он немного посложнее базового процессора ARM, но со своими особенностями. Например, это не RISC, инструкции могут быть крайне длинными, особенно инструкция PUSH и POP, количество операндов которое варьируется от 0 до 255.

§ Архитектура

Набор флагов: O — Overflow, S — Sign, Z — Zero, C — Carry. Всего лишь 4 флага, которые устанавливаются после выполнении операции АЛУ и сдвигов.

§ Набор инструкции (ISA)

Перемещения
OPCМнемоникаОперандыЦикловОписание
00MOVAA **6Поместить непосредственное значение двойного слова в регистр A
01MOVBB AA3Скопировать регистр B в регистр A
02MOVB A, [B]BB AA5Извлечь байт из памяти и запись в A с очисткой старших 24 бит в 0
03MOVW A, [B]BB AA6Извлечь слово из памяти и запись в A с очисткой старших 16 бит в 0
04MOVD A, [B]BB AA8Извлечь двойное слово из памяти в регистр A
05MOVB [A], BBB AA5Запись младших 8 бит регистра B в память A
06MOVW [A], BBB AA6Запись младших 16 бит регистра B в память A (little endian)
07MOVD [A], BBB AA8Запись регистра B в память A (little endian)
1EMOVSAA **3Помещение знакорасширенного значения байта в регистр A
Вычисление
OPCМнемоникаОперандыЦикловОписание
08MULBB CC AA RR5Беззнаковое умножение B x C с записью младшего результата в A, старшего в R
09DIVBB CC AA RR38Беззнаковое деление B на C с результатом в A и остатком в R
Процедуры
OPCМнемоникаОперандыЦикловОписание
0CCALL**5Вызов процедуры, запись в стек следующего за CALL адреса PC
0DRET3Возврат из процедуры
Стек
OPCМнемоникаОперандыЦикловОписание
0EPUSHnn ...4+Запись nn регистров в стек, номера их следуют за параметром nn
0FPOPnn ...3+Извлечение из стека nn регистров, номера их следуют за параметром nn
АЛУ
OPCМнемоникаОперандыЦикловОписание
10ADDAA BB CC4Сложение A + B с записью в C
11ADCAA BB CC4Сложение с учетом переноса A + B с записью в C
12SUBAA BB CC4Вычитание A - B с записью в C
13SBCAA BB CC4Вычитание с учетом переноса A - B с записью в C
14ANDAA BB CC4Логическое A and B с записью в C
15XORAA BB CC4Логическое A xor B с записью в C
16ORAA BB CC4Логическое A or B с записью в C
17CMPAA BB4Вычитание A - B без записи в регистр, только флаги
Сдвиги
OPCМнемоникаОперандыЦикловОписание
18ROLAA BB4Циклический сдвиг регистра A налево
19RORAA BB4Циклический сдвиг регистра A вправо
1ASHLAA BB4Логический сдвиг регистра A влево
1BSHRAA BB4Логический сдвиг регистра A вправо
1CRCLAA BB4Сдвиг регистра A влево, заполняя младшие биты значением CF
1DRCRAA BB4Сдвиг регистра A вправо, заполняя старшие биты значением CF
1FSARAA BB4Сдвиг регистра A вправо, заполняя старшие биты значением старшего 31-го бита
Переход
OPCМнемоникаОперандыЦикловОписание
70JRb82Короткий переход -128..127
71JP**5Перейти по 32-х битному адресу
72JCb81-2Короткий переход если CF=1
73JNCb81-2Короткий переход если CF=0
74JZb81-2Короткий переход если ZF=1
75JNZb81-2Короткий переход если ZF=1
76JBEb81-2Короткий переход если CF=1 AND ZF=1
77JAb81-2Короткий переход если CF=0 OR ZF=0
78JSb81-2Короткий переход если SF=0
79JNSb81-2Короткий переход если SF=1
7AJPAA3Перейти на адрес, указанный в регистре A
7CJLb81-2Знаковое сравнение и если A < B, переход
7DJNLb81-2Знаковое сравнение и если A >= B, переход
7EJLEb81-2Знаковое сравнение и если A <= B, переход
7FJGb81-2Знаковое сравнение и если A > B, переход