Здравствуйте, qwertyuiop, Вы писали:
Q>А какая в нем система команд?
RISC-подобная система команд, в общей сложности 60 команд.
Юзеру доступно восемь регистров общего назначения (R0-R7), плюс несколько специальных: SP (stack pointer), OP (object pointer), BP (base pointer).
Вся арифметика/логика только над регистрами. Загрузка/выгрузка регистров осуществляется в следующих режимах:
UPDATE: Арифметика/логика так же есть в режме "регистр и константа".
0. Инициализация регистра константой.
1. По константному адресу.
2. Косвенная адресация через регистр (любой из доступных).
4. Косвенная адресация со смещением от указателя OP или BP (смещение — либо константа, либо из регистра).
(Без)условные переходы либо константному адресу, либо через регистр.
Поддерживается работа со стеком: CALL/RET, PUSH/POP. В стек кладётся не только адрес возврата, но и адрес указателя на начало стекового фрейма. Благодаря этому можно не заботиться о выталкивании из стека лишнего при вызове RET — стек автоматически восстановится в нужное состояние.
Прерывания, обработка ошибок и т.п. пока не реализованы, работа на будущее.
Как-то так, вроде основные моменты осветил.
UPDATE: Код "Hello world":
Label Command Arg1 Arg2
TTY const 0FC00h
nop
init R0 msg
loop ldi R1 R0
cmpc R1 0
je exit
str R1 TTY
inc R0
jmp loop
exit jmp exit
msg string Hello, World!
dw 10
stringz Have a nice day.
END PROGRAM
Q>Команды и данные в одной памяти или в разных?
В одной.
0>>Ширина адреса: 16 бит, максимально адресуемая память — 128К (65536 двухбайтовых слов). Отдельные байты не адресуются.
Q>Смелое решение. Я тоже как-то думал, что сейчас байты не нужны, в USB используется UTF-16 поэтому работать нужно в ней. А во многих сигнальных процессорах байтов нет уже давно.
Это решение исключительно для упрощения схемы процессора. Поскольку я ориентируюсь на систему уровня Intel 80080/Zilog Z80, в ней байтовая адресация всё ещё актуальна.
У меня в планах стоит разработать третью версию процессора, в которой я реализую ещё ряд фич, в т.ч. и байтовую адресацию.