Эмулятор и ассемблер процессора Subleq


Императивный язык SUBLEQ (SUbtractandBranchifLessthanorEQualtozero) реализует процессор с одной инструкцией OISC (OneInstructionSetComputer на базе которого можно построить компьютер архитектуры URISC (UltimateReducedInstructionSetComputer) Ассемблер и интерпретатор реализован в 2006-2009 году

 

Язык процессора Subleq содержит одну инструкцию. Любая инструкция состоит из трех операндов: A B C, где каждый операнд это одно слово: subleq a b c

 

Процессор Subleq в первой части инструкции осуществляет манипуляции с памятью. Он вычитает значение ячейки памяти, хранящейся по адресу A, из содержимого ячейки памяти, хранящейся по адресу B, а затем записывает результат обратно в ячейку с адресом B. Затем процессор выполняет вторую часть инструкции - проверку. Если значение ячейки по адресу B, после вычитание, меньше или равно нулю, то выполняется переход по адресу, заданного операндом C; в противном случае процессор продолжает обработку инструкций следующих за ячейкой операнда С. Смысл работы инструкции Subleq ассоциируется с работой нейрона искусственной нейронной сети “Формируется разночтение, запоминается дельта, проверяется ступенчатой активационной функцией дельта и осуществляется переход по произвольно линии связи”.

 

Ассемблирование. Ассемблер языка Subleq обрабатывает текстовый файл с расширением sq.

 

 

Программирование на языке Subleq арифметических операций

 

Метка ZR обозначает зарезервированной регистр с нулевым значением; NR обозначает

зарезервированной регистр с отрицательной единицей; TA, TB, TC, являются временным

хранением регистров A, B и C. Команда JMP m: jumptomemorylocation m.

Сложение – ADD

a b c: m(c) = m(a) + m(b):

# Суммадвухчисел C=A+B

subleq a ZR

subleq b ZR # ZR = - a - b

subleq c c # c = 0

subleq ZR c # c = a +b

sublez ZR ZR # ZR = 0

6) Вычитание – SUB a b c: m(c) = m(b) - m(a):

subleq TA TA # TA = 0

subleq TB TB # TB = 0

subleq a TA

subleq b TB

subleq TB TA # TA = b - a

subleq c c

subleq TB TB

subleq TA TB # TB = a - b

subleq TB c # c = b – a.

 

 

Деление – DIV a b c: m(c) = m(a) / m(b):

subleq TA

subleq TB

subleq TC

subleq b TA

subleq TA TB # TB = b

subleq TA TA

subleq a TA

subleq TA TC # TC = a

subleq c c

subleq NR c # c++

subleq TC TB ?+2 # b -= a, if b<=0 JMP 2

subleq ZR ZR ?-2 # loop back to c++

 

Умножение – MUL a b c: m(c) = m(a) * m(b):

subleq TA

subleq TB

subleq TC

subleq b TA

subleq TA TB # TB = b

subleq NR c # c = 1

subleq TA TA

subleq a TA # TA = -a

subleq c c

#sub (-a) from dest and b--, when b<=0 esc

subleq TA c

subleq TC TB +2

subleq ZR ZR -2 # loopback

 



Дата добавления: 2017-01-16; просмотров: 2628;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.