§ Базовые сведения
В данном случае ЛИС — это Легкая Информационная Система, процессор, который имеет небольшое количество инструкции. Особенность моего процессора:- Тип — CISC
- Скорость — низкая
- Разрядность — 32 бита
- Шина данных — 8 бит
- Количество регистров — 256 регистров
- Размер стека — от 256 элементов, 32х битный
- Группы инструкции — перемещения, арифметико-логические, сдвиговые, условные и безусловные переходы, стековые, умножение и деление
- Операции — регистр-регистр
- Защищенный режим — как повезёт
- Доступ к портам — осуществляется через доступ к памяти
§ Архитектура
Набор флагов: O — Overflow, S — Sign, Z — Zero, C — Carry. Всего лишь 4 флага, которые устанавливаются после выполнении операции АЛУ и сдвигов.§ Инструкции
00 MOV |
01 MOV |
02 MOVB |
03 MOVW |
04 MOVD |
05 MOVB |
06 MOVW |
07 MOVD |
08 MOVU |
09 MOVS |
0A MUL |
0B DIV |
0C CALL |
0D RET |
0E PUSH |
0F POP |
10 ADD |
11 ADC |
12 SUB |
13 SBC |
14 AND |
15 XOR |
16 OR |
17 |
18 ROL |
19 ROR |
1A SHL |
1B SHR |
1C RCL |
1D RCR |
1E MOVS |
1F SAR |
20 JR |
21 JMP |
22 JC |
23 JNC |
24 JZ |
25 JNZ |
26 JBE |
27 JA |
28 JS |
29 JNS |
2A JMP |
2B ADDS |
2C JL |
2D JNL |
2E JLE |
2F JG |
30 ADD |
31 ADC |
32 SUB |
33 SBC |
34 AND |
35 XOR |
36 OR |
37 CMP |
38 FADD |
39 FSUB |
3A FMUL |
3B FDIV |
3C FINT |
3D FLD |
3E |
3F |
§ Набор инструкции (ISA)
Перемещения | ||||
---|---|---|---|---|
OPC | Мнемоника | Операнды | Циклов | Описание |
00 | MOV A,u32 | AA ** | 6 | Поместить непосредственное значение двойного слова в регистр A |
01 | MOV A,B | BB AA | 3 | Скопировать регистр B в регистр A |
02 | MOVB A,[B] | BB AA | 4 | Извлечь байт из памяти и запись в A с очисткой старших 24 бит в 0 |
03 | MOVW A,[B] | BB AA | 5 | Извлечь слово из памяти и запись в A с очисткой старших 16 бит в 0 |
04 | MOVD A,[B] | BB AA | 7 | Извлечь двойное слово из памяти в регистр A |
05 | MOVB [A],B | BB AA | 5 | Запись младших 8 бит регистра B в память A |
06 | MOVW [A],B | BB AA | 6 | Запись младших 16 бит регистра B в память A (little endian) |
07 | MOVD [A],B | BB AA | 8 | Запись регистра B в память A (little endian) |
08 | MOVU A,u8 | AA ** | 3 | Помещение unsigned значения байта в регистр A |
09 | MOVS A,s8 | AA ** | 3 | Помещение signed значения байта в регистр A |
1E | MOVS A,B,C | AA BB CC | Скопировать из A в B, количество байт C | |
Вычисление | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
0A | MUL A*B=>H,L | AA BB HH LL | 5 | Беззнаковое умножение A x B с записью младшего результата в L, старшего в H. Сначала записывается старший |
0B | DIV A/B=>R,Q | AA BB RR QQ | 38 | Беззнаковое деление A на B с результатом в Q и остатком в R |
Процедуры | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
0C | CALL u32 | ** | 5 | Вызов процедуры, запись в стек следующего за CALL адреса PC |
0D | RET | 1 | Возврат из процедуры | |
Стек | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
0E | PUSH ... | nn ... | 4+ | Запись nn регистров в стек, номера их следуют за параметром nn |
0F | POP ... | nn ... | 3+ | Извлечение из стека nn регистров, номера их следуют за параметром nn |
АЛУ-3 | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
10 | ADD A,B,C | AA BB CC | 4 | Сложение A + B с записью в C |
11 | ADC A,B,C | AA BB CC | 4 | Сложение с учетом переноса A + B с записью в C |
12 | SUB A,B,C | AA BB CC | 4 | Вычитание A - B с записью в C |
13 | SBC A,B,C | AA BB CC | 4 | Вычитание с учетом переноса A - B с записью в C |
14 | AND A,B,C | AA BB CC | 4 | Логическое A and B с записью в C |
15 | XOR A,B,C | AA BB CC | 4 | Логическое A xor B с записью в C |
16 | OR A,B,C | AA BB CC | 4 | Логическое A or B с записью в C |
Сдвиги | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
18 | ROL A,B | AA BB | 4 | Циклический сдвиг регистра A налево |
19 | ROR A,B | AA BB | 4 | Циклический сдвиг регистра A вправо |
1A | SHL A,B | AA BB | 4 | Логический сдвиг регистра A влево |
1B | SHR A,B | AA BB | 4 | Логический сдвиг регистра A вправо |
1C | RCL A,B | AA BB | 4 | Сдвиг регистра A влево, заполняя младшие биты значением CF |
1D | RCR A,B | AA BB | 4 | Сдвиг регистра A вправо, заполняя старшие биты значением CF |
1F | SAR A,B | AA BB | 4 | Сдвиг регистра A вправо, заполняя старшие биты значением старшего 31-го бита |
Переход | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
20 | JR b8 | 8 | 2 | Короткий переход -128..127 |
21 | JMP u32 | 32 | 5 | Перейти по 32-х битному адресу |
22 | JC b8 | 8 | 1-2 | Короткий переход если CF=1 |
23 | JNC b8 | 8 | 1-2 | Короткий переход если CF=0 |
24 | JZ b8 | 8 | 1-2 | Короткий переход если ZF=1 |
25 | JNZ b8 | 8 | 1-2 | Короткий переход если ZF=1 |
26 | JBE b8 | 8 | 1-2 | Короткий переход если CF=1 AND ZF=1 |
27 | JA b8 | 8 | 1-2 | Короткий переход если CF=0 OR ZF=0 |
28 | JS b8 | 8 | 1-2 | Короткий переход если SF=1 |
29 | JNS b8 | 8 | 1-2 | Короткий переход если SF=0 |
2A | JMP AA | AA | 3 | Перейти на адрес, указанный в регистре A |
2C | JL b8 | 8 | 1-2 | Знаковое сравнение и если A < B, переход |
2D | JNL b8 | 8 | 1-2 | Знаковое сравнение и если A >= B, переход |
2E | JLE b8 | 8 | 1-2 | Знаковое сравнение и если A <= B, переход |
2F | JG b8 | 8 | 1-2 | Знаковое сравнение и если A > B, переход |
АЛУ | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
2B | ADDS A,s8 | AA ** | Прибавить знаковое число к регистру A | |
АЛУ-2 | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
30 | ADD A,B | AA BB | 4 | Сложение A + B с записью в A |
31 | ADC A,B | AA BB | 4 | Сложение с учетом переноса A + B с записью в A |
32 | SUB A,B | AA BB | 4 | Вычитание A - B с записью в A |
33 | SBC A,B | AA BB | 4 | Вычитание с учетом переноса A - B с записью в A |
34 | AND A,B | AA BB | 4 | Логическое A and B с записью в A |
35 | XOR A,B | AA BB | 4 | Логическое A xor B с записью в A |
36 | OR A,B | AA BB | 4 | Логическое A or B с записью в A |
37 | CMP A,B | AA BB | 4 | Логическое A or B с записью в A |
FLOAT | ||||
OPC | Мнемоника | Операнды | Циклов | Описание |
38 | FADD A,B | AA BB | 4 | A = A + B |
39 | FSUB A,B | AA BB | 4 | A = A - B |
3A | FMUL A,B | AA BB | 4 | A = A * B |
3B | FDIV A,B | AA BB | 28 | A = A / B |
3C | FINT A,B | AA BB | 4 | Конвертирование B в Integer A |
3D | FLD A,B | AA BB | 4 | Конвертирование B в Float32 B |