Ассемблер для Intel 8080 на TypeScript
Moderator: Shaos
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
Относительно org вычисляются метки, а не адреса переходов. То есть org задает абсолютное смещение для все меток до следующего org.
Так как в i8080 все переходы абсолютные, такой логики достаточно.
Так как в i8080 все переходы абсолютные, такой логики достаточно.
-
Lavr
- Supreme God
- Posts: 17043
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Ассемблер для Intel 8080 на TypeScript
Интересно, однако... Значит JMP METKA и CALL METKA - здесь METKA не адрес перехода?
iLavr
-
DmitryMilk
- Senior
- Posts: 125
- Joined: 12 May 2025 21:56
Re: Ассемблер для Intel 8080 на TypeScript
А в чем проблема-то с несколькими ORG? Адреса меток же по идее должны вычисляться на первом проходе, адрес метки определяется тем ORG, после которого она идет. А после какого ORG расположен CALL или JMP, переходящий по этой метке - не важно, т.к. к моменту второго прохода адреса всех меток уже полностью определены.Lavr wrote: 19 Apr 2026 14:31 Относительно org вычисляются адреса переходов. И какой из org берётся за точку отсчёта теперь?
Если у меня на один и тот же адрес jmp после первого org а потом после второго org? (ну или call...)
Я вот сейчас пишу под Z80, используя sjasm - вот там у меня вообще эквилибристика с метками - и определение одних меток через другие через EQU (смещения в бинарных данных), и даже есть ORG, в котором стоит не прямой адрес, а метка, определенная через EQU от другой метки
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
Как я уже писал, org - это просто статическое смещение в коде после него, включая, естественно, значения меток.
Можно иметь сколько угодно org’ов.
Конкретно в моем ассемблере есть дополнительные свойства org’ов, которые просто были моим решением.
Например, секции не могут пересекаться по адресам, то есть org’ом в целом нельзя пойти назад.
Или, адреса в org’ах используются при ренерации нескольких выходных файлов, если таковой режим (—split) задан.
Но обычно, если нужен единый файл, то дырки между секциями зануляются.
Все подробнейшим образом описано в документации.
Можно иметь сколько угодно org’ов.
Конкретно в моем ассемблере есть дополнительные свойства org’ов, которые просто были моим решением.
Например, секции не могут пересекаться по адресам, то есть org’ом в целом нельзя пойти назад.
Или, адреса в org’ах используются при ренерации нескольких выходных файлов, если таковой режим (—split) задан.
Но обычно, если нужен единый файл, то дырки между секциями зануляются.
Все подробнейшим образом описано в документации.
-
DmitryMilk
- Senior
- Posts: 125
- Joined: 12 May 2025 21:56
Re: Ассемблер для Intel 8080 на TypeScript
Я писал под MASM как раз с использованием вот таких конструкций вместо меток и условных переходов - это весьма удобно. Если еще использовать и отсутпы вложенности - ощущается, будто пишешь на ЯВУ.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
Именно для этого я if/else и добавил, которые могут быть вложены. И уже не надо вручную делать метки-выходы из условий.
А в сочетании с proc/endp/return для опционального сохранения и восстановления регистров, все еще удобнее.
А в сочетании с proc/endp/return для опционального сохранения и восстановления регистров, все еще удобнее.
-
Alekcandr
- Devil
- Posts: 758
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: Ассемблер для Intel 8080 на TypeScript
На мой взгляд все эти хитрые конструкции сильно ломают совместимость с классическими ассемблерами. И что мы имеем в сухом остатке? 1000 и 1 ошибку при портировании кода на классический ассемблер.
Впрочем, это дело автора ассемблера, как вариант может он пишет ассемблер исключительно для себя.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
Я б сказал, что это больше дело программиста.
Можно использовать чисто классические конструкции. Соображения совместимости на 100% валидны.
Я, например, люблю синтаксис нескольких команд в строке через « / », ибо сильно сокращает вертикальный размер кода, но в плане общей совместимости это точно нет.
Можно использовать чисто классические конструкции. Соображения совместимости на 100% валидны.
Я, например, люблю синтаксис нескольких команд в строке через « / », ибо сильно сокращает вертикальный размер кода, но в плане общей совместимости это точно нет.
-
Alekcandr
- Devil
- Posts: 758
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: Ассемблер для Intel 8080 на TypeScript
Вот, вот программиста
Случай из жизни. Есть исходник, под хитрый ассемблер, к тому же платный. Как перенести код? Простая задача становится не только сложной, но и финансово затратной (купить ассемблер для разового использования).
Это как раз по мне не проблема при переносе.begoon wrote: 20 Apr 2026 23:57 Я, например, люблю синтаксис нескольких команд в строке через « / », ибо сильно сокращает вертикальный размер кода, но в плане общей совместимости это точно нет.
Ладно я никого не собираюсь поучать, как делать "личный" ассемблер или язык программирования.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
Lavr
- Supreme God
- Posts: 17043
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Ассемблер для Intel 8080 на TypeScript
Ха... случай из жизни... Вот однажды скачиваю я из сети неплохой исходник одного нежадного автора.Alekcandr wrote: 21 Apr 2026 00:16Случай из жизни. Есть исходник, под хитрый ассемблер, к тому же платный. Как перенести код?
Но, как оказалось, автор почему-то очень любит макросы!
По большому счёту весь ассемблер у него упакован в макросы.
А сама программа фактически написана макросами как неким языком высокого уровня.
Ну, честно говоря, очень тяжело было как что-то полезное для себя вынести, так и подправить его творение в нужном мне русле.
iLavr
-
Lavr
- Supreme God
- Posts: 17043
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Ассемблер для Intel 8080 на TypeScript
Меня всегда удивляет, когда люди такой глупый вопрос задают: А в чем проблема-то ... ?DmitryMilk wrote: 20 Apr 2026 22:59А в чем проблема-то с несколькими ORG? Адреса меток же по идее должны вычисляться на первом проходе, адрес метки определяется тем ORG, после которого она идет. А после какого ORG расположен CALL или JMP, переходящий по этой метке - не важно, т.к. к моменту второго прохода адреса всех меток уже полностью определены.Lavr wrote: 19 Apr 2026 14:31Относительно org вычисляются адреса переходов. И какой из org берётся за точку отсчёта теперь?
Если у меня на один и тот же адрес jmp после первого org а потом после второго org? (ну или call...)
А я разве где-то написал, что есть проблема?
Мне конкретно было интересно, как автор реализовал множественные ORG.
Автор мне пояснил, хотя что-то навёл тень на плетень "с адресами переходов / метками".
Почему мне это интересно? Когда я писал свой собственный ассемблер для себя, я ввёл специальный оператор, определяющий байт заполнения.
И в некоторых случаях я его выбираю не 00Н, как у Демина, а 0FFH.
А проблемы никакой нет. Ни у меня ни у автора. Просто бывают ассемблеры, которые уже второй ORG не воспринимают...
iLavr
-
Mondx
- Devil
- Posts: 674
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: Ассемблер для Intel 8080 на TypeScript
Да, удобно. И часто наглядно.begoon wrote: 20 Apr 2026 23:57 Я, например, люблю синтаксис нескольких команд в строке через « / », ибо сильно сокращает вертикальный размер кода, но в плане общей совместимости это точно нет.
А я люблю макро. И с ними можно городить очень много чего. Почти как высокоуровневый язык получается.
Всегда!
-
vital72
- Maniac
- Posts: 200
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Ассемблер для Intel 8080 на TypeScript
тоже тут решил запилить легкий компилятор ассемблера для своего эмулятора, увлекательнейшее занятие, надо сказать, столько разных подводных камней сразу вылазит наружу, о которых не предполагал или не обращал внимание... и один из них -- проверка корректности синтаксиса.
вот это компилятор проглатывает с радостью:
вот это компилятор проглатывает с радостью:
Code: Select all
nop dick
stax sp
ldax a
mov pussy, dick
mvi a, 333333
adi 999999
mov n,n
mov m , m
rst 11111111
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
Да, там есть моменты.
Примеры, что вы указали я исправил.
Примеры, что вы указали я исправил.
-
begoon
- Maniac
- Posts: 282
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: Ассемблер для Intel 8080 на TypeScript
## 1.0.30 — 2026-05-26
Кодировщик напрямую использовал обращения REG8[...] / REG_PAIR[...], поэтому неизвестные имена регистров возвращали undefined, а выражение undefined | opcode приводилось к самому opcode — в результате mov foo, bar молча кодировался как MOV B,B, ldax a как LDAX B, а mov m, m как HLT. Непосредственные значения маскировались через & 0xff без проверки диапазона, а количество операндов не контролировалось (nop dick собирался как NOP).
Теперь неизвестные регистры, неверное количество операндов, непосредственные значения вне диапазона (8/16-бит), использование LDAX/STAX с чем-либо кроме B/D, MOV M,M и RST вне диапазона 0..7 вызывают ошибки на соответствующей строке.
Кодировщик напрямую использовал обращения REG8[...] / REG_PAIR[...], поэтому неизвестные имена регистров возвращали undefined, а выражение undefined | opcode приводилось к самому opcode — в результате mov foo, bar молча кодировался как MOV B,B, ldax a как LDAX B, а mov m, m как HLT. Непосредственные значения маскировались через & 0xff без проверки диапазона, а количество операндов не контролировалось (nop dick собирался как NOP).
Теперь неизвестные регистры, неверное количество операндов, непосредственные значения вне диапазона (8/16-бит), использование LDAX/STAX с чем-либо кроме B/D, MOV M,M и RST вне диапазона 0..7 вызывают ошибки на соответствующей строке.
