- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 96
- Подписчиков на Modrinth
- 2
- версии
- 2
- Обновлён
- 1 марта 20261 мар.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Asm Craft
Мод создан sally4953. Этот мод распространяется под открытой лицензией MIT. Исходный код можно посмотреть в репозитории на GitHub: https://github.com/sally4953/asmcraft Этот мод позволяет писать программы на языке ассемблера прямо в Minecraft и запускать их. На данный момент мод поддерживает только Minecraft Assembly Language. Компилятор C++ всё ещё в разработке. Но я постараюсь довести компилятор C++ до конца. Чтобы собранное приложение можно было запустить, я реализовал в Minecraft виртуальную машину (VM). Она использует совершенно другой фреймворк. Итак, позвольте показать вам конкретную информацию:
Информация о виртуальной машине
Регистры
Есть 7 регистров. Первые четыре используются как переменные при вызове функции. Ещё один регистр хранит указатель для выполнения программы (указывает на адрес в памяти, обозначая текущую выполняемую инструкцию), и ещё один — для хранения возвращаемого значения функции. Последний регистр — результат проверки условия, у него всего два состояния.
Память
В VM есть две области памяти. Одна хранит команды приложения. Её размер — 1024 байта. Так что каждое приложение не должно превышать 1024 байта (но, думаю, никто не напишет такое приложение). Другая память хранит данные времени выполнения. Её размер тоже 1024 байта. Думаю, 1024 байт памяти хватит большинству игроков (или программистов).
Команды
На данный момент VM поддерживает только 22 команды. В следующей таблице приведена информация о них.
| Название | Комментарий | Длина (байт) |
|---|---|---|
| nop | Команда, которая ничего не делает. | 1 |
| ret | Команда возврата из функции. | 1 |
| mov A, B | Присвоить B значение A. | 5 |
| sub A, B | Вычесть B из A. | 5 |
| mul A, B | Умножить A на B. | 5 |
| div A, B | Разделить A на B. | 5 |
| jmp A | Прямой переход к A. | 3 |
| cjp A | Перейти к A, если последний регистр истинен. | 3 |
| grt A, B | Если A больше B, последний регистр истинен (иначе не истинен). | 5 |
| lst A, B | Если A меньше B, последний регистр истинен (иначе не истинен). | 5 |
| equ A, B | Если A равно B, последний регистр истинен (иначе не истинен). | 5 |
| cal A | Вызвать функцию A (A — адрес в памяти или метка). | 3 |
| ccl A | Вызвать A, если последний регистр истинен (A — адрес в памяти или метка). | 3 |
| and | Установить последний регистр в true тогда и только тогда, когда значения в первом и втором регистрах оба равны true (иначе false). | 1 | | or | Установить последний регистр в true тогда и только тогда, когда одно из значений в первом и втором регистрах равно true (иначе false). | 1 | | xor | Установить последний регистр в true тогда и только тогда, когда значения в первом и втором регистрах не совпадают (true или false). | 1 | | not | Инвертировать значение последнего регистра. | 1 | | inc A | Прибавить единицу к A. | 3 | | dec A | Вычесть единицу из A. | 3 | | neg A | Записать в A противоположное ему число. | 3 | | int A | Прервать выполнение, запросить у виртуальной машины вызов функции с номером A в памяти, дождаться завершения, и виртуальная машина установит значение в регистр 5. Список поддерживаемых прерываний смотрите в следующей таблице. | 2 |
Прерывания
Виртуальная машина поддерживает только 12 команд прерывания. В следующей таблице показаны эти прерывания.
| Код | Комментарий |
|---|---|
| 0 | Выход. |
| 1 | Вывести целое число над хотбаром. |
| 2 | Вывести символ над хотбаром. |
| 3 | Установить мировое время в значение регистра 0. |
| 4 | Установить значение регистра 5 в мировое время. |
| 5 | Взять регистр 0 в качестве сида и сгенерировать случайное число в регистр 5. |
| 6 | Установить счёт игрока в значение регистра 0. |
| 7 | Установить значение регистра 5 в счёт игрока. |
| 8 | Установить здоровье игрока в значение регистра 0. |
| 9 | Установить значение регистра 5 в десятикратное здоровье игрока. |
| 10 | Установить позиции игрока по осям X, Y и Z в 1/10 значений регистра 0, регистра 1 и регистра 2 соответственно. |
| 11 | Если значение регистра 0 равно 0, установить регистр 5 в десятикратную позицию игрока по оси X; если 1 — в десятикратную позицию игрока по оси Y; если 2 — в десятикратную позицию игрока по оси Z; иначе R5 остаётся равным 0. | Этот мод лучше поддерживает китайский. Поэтому, если вы не знакомы с китайским, возможно, вам понадобится переводчик. Это всё содержимое данного мода. В любом случае, наслаждайтесь!
Частые вопросы
Как установить Asm Craft?
Установите Fabric под свою версию Minecraft, скачайте Asm Craft под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Asm Craft?
У Asm Craft есть сборки для Minecraft 1.21.4.
Нужен ли Asm Craft на сервере?
Нужен и в игре, и на сервере