Вопрос

Последний семестр в колледже, мой учитель на классе компьютерных языков научил нас эзотерический язык по имени Пробел. Отказ В интересах изучения языка лучше с очень оживленным графиком (Midterms), я написал устный переводчик а также ассемблер в Питон. Отказ Ан язык ассемблера был разработан, чтобы легко облегчить написание программ и Образец программы был написан с данной Ассамблеей мнемоника.

Теперь, когда это лето, новый проект начал с целью переписать переводчик и ассемблер для пробела 0,3, при этом дальнейшие события, которые последующие. Поскольку есть столько дополнительного времени, чем раньше работы над своим дизайном, вы представлены здесь с контуром, который предоставляет пересмотренный набор Mneminics для языка Ассамблеи. Этот пост помечен как вики для их обсуждения.

У вас когда-нибудь был опыт с языками сборки в прошлом? Были ли некоторые инструкции, которые вы думали, должны были быть переименованы на что-то другое? Вы нашли думать за пределами коробки и с другой парадигмой, чем в которой была названа мнемоника? Если вы можете ответить «Да» к любому из этих вопросов, вы приветствуете здесь. Субъективные ответы ценятся!


Манипуляция стеками (Imp: [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

Доступ в кучу (Imp: [Tab] [Tab])

Команды доступа кучи Посмотрите на стек, чтобы найти адрес элементов, которые будут сохранены или извлечены. Чтобы сохранить элемент, нажмите адрес, затем значение и запустите команду хранилища. Чтобы получить элемент, нажмите адрес и запустите команду извлечения, которая будет поместить значение, хранящееся в месте в верхней части стека.

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])

Наконец, нам нужно иметь возможность взаимодействовать с пользователем. Есть IO IO для чтения и письма номеров и отдельных персонажей. С этим можно записать рутины манипулирования строковыми манипуляциями. Инструкции по чтению возьмите адрес кучи, в котором хранить результат в верхней части стека.

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

Вопрос: Как бы вы переписали, переписали или переименуйте предыдущую Mneminics и по каким причинам?

Это было полезно?

Решение

  • Нажмите #N, чтобы понять, что N является немедленным.
  • «Swap» иногда «Exc» или «Exch», я думаю.
  • «Сохранить» обычно «St» (Store)
  • «Нагрузка» обычно «ld»
  • «Звонок» также может быть «JSR» или «BL».
  • «GoTo» обычно «JMP» или «бюстгальтер»
  • «Если = 0» обычно «BEQ»
  • "Если <0" обычно "BLT"
  • «Возвращение» обычно «RET» или «BLR»
  • «Выход» обычно «остановка» / «HLT» в контексте ЦП.
  • «Печать CHR» и «Print INT» может быть «Print.c» и «print.i». Есть много способов указать варианты обучения, но обычно это не в операндах.

РЕДАКТИРОВАТЬ:

Если вы не возражаете в возрасте слияния OPCODES и режимов адресации, используя синтаксис CISCY,

  • «Push (Sp)» вместо «копирования»
  • «Push n (SP)» вместо «копирования N» (Modulo умножения по размеру слова)
  • «Нажмите * (SP)» вместо «загрузки» (за исключением того, что он делает POP, прежде чем нажать загруженные значения)
  • «POP * 1 (SP)» вместо «push» (за исключением того, что он на самом деле дважды выскакивает)

С другой стороны, код на основе стека обычно обрабатывает Push и POP как неявное. В этом случае «Imm N» (немедленный) вместо «толчок». Затем все операции стека являются чисто стековыми операциями, что приятно и последовательно.

Я не уверен, что я бы написал «падение n» - описание делает его звуком, как «падение 1», не эквивалентно «капелю», которое кажется нечетным.

Другие советы

Я думаю, что первое изменение, которое я бы предложил, это изменение удержания и падения на толчок и поп соответственно.

Тогда, может быть, я переименую копию в DUP (я думаю, что это самое распространенное имя для этой операции в языках ориентированных на стек).

Я немного озадачен, почему часто у вас коротко одно слово объяснения, которые разные к мнемоническому. Например, MneMonic - это экономия, объяснение хранилища. Мноническая нагрузка, объяснение извлекается. Кстати, это две мнемоники, которые не достаточно объяснены мне. Сохранить, что где? Нагрузка, что откуда? (Редактировать Впоследствии вопрос был отредактирован, чтобы эти значения были понятны)

Спасибо за интересный пост.

Я не уверен, что я полностью понимаю ваш вопрос, так что если я вынуму, прости меня.

В дополнение к вашему стеку, я, вероятно, добавлю «реестр состояния», который содержит различные флаги (например, переноса, переполнения и ноль), которые устанавливаются арифматическими операторами.

Я бы тогда добавил «если» формы, которые тестируют эти флаги.

Я бы добавил битовый сдвиг и поворот (как левый, так и правый) инструкции, а также операции, а также / или / xor / not операции, которые работают на битах.

Скорее всего, вы будете хотеть иметь какой-то доступ к памяти, если вы не намерены инструкции ввода / вывода для лечения памяти в качестве потока значений для этого хорошего ощущения Turge Turging Machine.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top