Последний семестр в колледже, мой преподаватель в классе Computer Languages научил нас эзотерическому языку по имени Whitespace. В интересах изучения языка лучше с очень напряженным графиком (midterms), я написал interpreter и assembler в Python. assembly language был разработан для облегчения написания программ, и sample program был записан с данным сборкой mnemonics.У вас есть предложения для этой сборной мнемоники?
Теперь, когда это лето, начался новый проект, целью которого было переписать интерпретатор и ассемблер для Whitespace 0.3 с последующими последующими событиями. Поскольку для работы над своим дизайном так много времени, как раньше, вы представляете здесь схему, которая предлагает пересмотренный набор мнемоник для языка ассемблера. Этот пост отмечен как вики для обсуждения.
У вас когда-либо был опыт работы с ассемблерами в прошлом? Были ли какие-то инструкции, которые, по вашему мнению, были переименованы в нечто иное? Вы считали себя вне коробки и с другой парадигмой, чем в названии мнемоники? Если вы можете ответить «да» на любой из этих вопросов, вам здесь очень рады. Субъективные ответы оцениваются!
Стек Манипуляция (ИМФ: [Пробел])
Стек манипуляции является одним из наиболее распространенных операций, следовательно, затрудненное МВП [Space]. Есть четыре инструкции по стеклу.
hold N Push the number onto the stack
copy Duplicate the top item on the stack
copy N Copy the nth item on the stack (given by the argument) onto the top of the stack
swap Swap the top two items on the stack
drop Discard the top item on the stack
drop N Slide n items off the stack, keeping the top item
Арифметика (IMP: [Tab], [Пробел])
Арифметические команды работают на двух верхних элементов в стеке, и заменить их с результатом операции. Первый элемент, нажатый, считается оставленным оператором.
add Addition
sub Subtraction
mul Multiplication
div Integer Division
mod Modulo
Heap доступа (IMP: [Tab] [Tab])
команды вороха доступа смотрят на стек, чтобы найти адрес пунктов, которые будут сохранены или восстановлены. Чтобы сохранить элемент, нажмите адрес, затем введите значение и запустите команду store. Чтобы получить элемент, нажмите адрес и запустите команду retrieve, которая поместит значение, хранящееся в местоположении в верхней части стека.
save Store
load Retrieve
управления потоком (IMP: [LF])
операции управления потоком также распространены. Подпрограммы отмечены метками, а также целями условных и безусловных переходов, посредством которых могут быть реализованы петли. Программы должны быть завершены с помощью [LF] [LF] [LF], чтобы интерпретатор мог выйти из строя.
L: Mark a location in the program
call L Call a subroutine
goto L Jump unconditionally to a label
if=0 L Jump to a label if the top of the stack is zero
if<0 L Jump to a label if the top of the stack is negative
return End a subroutine and transfer control back to the caller
halt End the program
I/O (IMP: [Tab] [LF])
Наконец, мы должны иметь возможность взаимодействовать с пользователем. Существуют инструкции ввода-вывода для чтения и записи чисел и отдельных символов. С их помощью могут быть записаны процедуры манипуляции строками. Инструкции чтения содержат адрес кучи для хранения результата из верхней части стека.
print chr Output the character at the top of the stack
print int Output the number at the top of the stack
input chr Read a character and place it in the location given by the top of the stack
input int Read a number and place it in the location given by the top of the stack
Вопрос: Как бы вы редизайн, переписать или переименовывать предыдущие мнемоники и по каким причинам?
Святое дерьмо, простой ассемблер? Я считаю, что ваш geek-o-meter просто поднялся до одиннадцати! – Martin