В прошлом семестре в колледже мой учитель на уроке компьютерных языков научил нас эзотерическому языку под названием Пробел . В интересах лучшего изучения языка с очень загруженным графиком (среднесрочные) я написал интерпретатор и ассемблер в Python . язык ассемблера был разработан для облегчения написания программ, а пример программы был написан для данной сборки мнемоника .
Теперь, когда лето, новый проект начался с целью переписать интерпретатор и ассемблер для Whitespace 0.3, после чего последуют дальнейшие разработки. Поскольку на его разработку ушло гораздо больше времени, чем раньше, вам представлен план с пересмотренным набором мнемоник для языка ассемблера. Этот пост отмечен как вики для их обсуждения.
Был ли у вас когда-либо опыт работы с языками ассемблера в прошлом? Были ли какие-то инструкции, которые, по вашему мнению, должны были быть переименованы во что-то другое? Вы обнаружили, что мыслите нестандартно и с другой парадигмой, в которой названы мнемоники? Если вы можете ответить «да» на любой из этих вопросов, пожалуйста, примите сюда. Субъективные ответы приветствуются!
Управление стеками (IMP: [Space])
Манипулирование в стеке - одна из наиболее распространенных операций, отсюда и краткость 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])
Команды доступа к куче просматривают стек, чтобы найти адрес элементов, которые будут сохранены или получены. Чтобы сохранить элемент, нажмите адрес, затем значение и выполните команду store. Чтобы получить элемент, нажмите на адрес и выполните команду получения, которая поместит значение, хранящееся в месте на вершине стека.
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 для чтения и записи чисел и отдельных символов. С их помощью могут быть написаны процедуры манипуляции со строками. Инструкции чтения берут адрес кучи, в котором хранится результат с вершины стека.
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
Вопрос: Как бы вы изменили дизайн, переписали или переименовали предыдущую мнемонику и по каким причинам?