Что можно сделать с помощью 13 команд в ассемблере?
Делаю интерпретатор для своей версии ассемблера, уже готово 14 команд и одна чисто для дебага. Список команд: mov, add, sub, div, mul, inc, dec, xcng, not, add, or, xor, nop и есть jmp, но он просто фризит программу (jmp $). Что из этой каши можно сделать?
Почти ничего серьезного.
Для того, чтобы язык назывался языком программирования, в нем должна быть возможность писать циклы и условия.
У вас условий нет.
Кроме того, интерпретатор ассемблера - это глупость.
Ассемблер неразрывно связан с архитектурой и адресацией памяти и устройств.
Как из вашего ассемблера работать с устройствами? Как вывести точку на экран или символ на экран? Где вообще экранная память, порт клавиатуры и так далее?
В ассемблере условия конечно есть.
Есть флаги, которые меняют свое значение в зависимости от различных операций, типа inc или cmp
Есть условные переходы, типа jz/jnz, которые зависят от состояния флагов.
Денис Загаевский: Человек уже написал интерпретатор с 14 командами.
Что для изучения чего-либо может быть лучше, чем практика?
Даже неудачная практика часто лучше, чем прочитанная книга.
Saboteur: В целом могу, но я интерпретаторы в то время не писал. Потому и говорю - рано ему. Утверждения типа "в ассемблере нет условных переходов" от человека, пишущего интерпретатор ассемблера, наводят на такую мысль.
Денис Загаевский:
Если человек на практике понял значение регистров, флагов и стека - я считаю, что это круто.
Поэтому "рано" - это не корректно говорить. Писать такое для продажи - рано. Для практики и учебы - да пусть хоть операционную систему уже пишет. Пока она хотя бы запустится - изучит больше технологий, чем другой программист, который все это время читал книжки.
Ну, начнём с того, что ассемблер не интерпретируется, он по определению транслируется в машинный код. А чего вы хотите добиться от своего интерпретатора и языка? У brainfuck вон вообще 8 операторов и тем не менее он полный по тьюрингу.