nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 16 Oct 2018 12:09



Reply to topic  [ 62 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next
Кроссассемблеры для 8080? 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
вот как это делал я в конце 90х:

Сам придумал?

_________________
iLavr


13 Dec 2015 16:49
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16997
Location: Colorado
Reply with quote
Lavr wrote:
Shaos wrote:
вот как это делал я в конце 90х:

Сам придумал?

Угу - но все примерно так и делают - выражение с переменными и скобками вычислять можно только одним единственным способом, который можно запрограммировать тем или иным образом ;)

_________________
:eugeek: https://twitter.com/Shaos1973


13 Dec 2015 16:57
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Shaos wrote:
вот как это делал я в конце 90х:

Сам придумал?

Угу - но все примерно так и делают...

Ну вот и я - "угу"... только до твоих 90-х и моих чуть раньше это написали в десятках книжек.
Shaos wrote:
выражение с переменными и скобками вычислять можно только одним единственным способом, который можно запрограммировать тем или иным образом ;)

А вот это галимая неправда или твоё личное заблуждение. Способ-то как раз не один единственный.
Кстати, в тех же книжках и написано... 8)

_________________
iLavr


13 Dec 2015 17:03
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16997
Location: Colorado
Reply with quote
способ по сути один - через стек (рекурсия это тоже стек)

_________________
:eugeek: https://twitter.com/Shaos1973


13 Dec 2015 17:18
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
способ по сути один - через стек (рекурсия это тоже стек)

Ну сам себе противоречишь... :ebiggrin: Даже если свято поверить тебе, никуда не глядя,
то уже не один. И с чего ты решил, что он "по сути один - через стек"? :roll:


P.S. Что-то мне это напомнило одного деятеля с ZX.PK, который заявил, что все компьютеры
на i8080 - одинаковы... Поскольку в них во всех i8080.
Так и у тебя - что не делай, это - тоже будет стек...
:ebiggrin:

_________________
iLavr


13 Dec 2015 17:49
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16997
Location: Colorado
Reply with quote
просто далеко не во всех ассемблерах есть функционал по вычислению выражений - это штука второстепенная, как и максимально разрешённая длина строки

_________________
:eugeek: https://twitter.com/Shaos1973


13 Dec 2015 18:17
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
просто далеко не во всех ассемблерах есть функционал по вычислению выражений - это штука второстепенная...

Ну, как говорится, "я вам не скажу за всю Одессу, вся Одесса очень велика"... :lol:
Но замечал я, что JMP $+2 умеют делать очень многие ассемблеры! :roll:
И как же они это делают без "функционала по вычислению выражений"? :o

И, раз уж на то пошло, то примитивы типа JMP $+2 и SHLD METKA+1 запросто
реализуются без всяких стеков линейным разбором строки.
Другое дело, что это не универсальная вещь, да и неудобная, что, собственно, и позвало
меня поискать более оптимальные алгоритмы - об чем и весь сыр-бор тут...

Суть-то в чем? Суть в том - для какой системы мы пишем ассемблер. Если это ассемблер
для кросс-системы, работает на системе с большими ресурсами, там хоть два стека
организуй и неограниченную длину строки.
А если ассемблер для системы, у которой ОЗУ - 48К, и в этом ОЗУ - сам транслятор, исходный
текст и буфер под код, стеки-то особо не размахнешь... Можешь увидеть сообщение "Мало ОЗУ",
если буфер меток переполнится.

Поэтому в доступных мне исходниках я и видел - размер возможного арифметического выражения
ограничивают, если что выдают: "Expression Too Complex".

_________________
iLavr


13 Dec 2015 18:32
Profile
God

Joined: 02 Jan 2006 03:28
Posts: 1354
Location: Abakan
Reply with quote
Lavr, у меня где-то были ссылки на теорию, но мне так показалось, что оно тебе не нужно, а практического кода у меня увы нет. В 90-х был, но сплыл, и тот не мой, а хорошего знакомого.
А алгоритмов не один, только общеупотребимых, на сколько я помню, аж три штуки, и один из них как раз рекурсивный.


13 Dec 2015 21:46
Profile
Doomed

Joined: 10 Mar 2012 17:21
Posts: 565
Location: РФ
Reply with quote
Lavr wrote:
...
А если ассемблер для системы, у которой ОЗУ - 48К, и в этом ОЗУ - сам транслятор, исходный
текст и буфер под код, стеки-то особо не размахнешь...
Значит надо "апгрейдить" систему, добавить 64к озу "чиста" для стека. :kruto: :rotate:


14 Dec 2015 07:28
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
jdigreze wrote:
Lavr, у меня где-то были ссылки на теорию, но мне так показалось, что оно тебе не нужно, а практического кода у меня увы нет.

Спасибо! Я вчера уж всё нашел, и теорию и экземпляр кода - тут ты меня своим намёком сориентировал верно! :kruto:

Просто мы с Shaos-ом ведем никчему не обязывающую беседу... Он меня убеждает, мол "каждый ...рочит,
как он хочет
". А я с ним соглашаюсь, говорю "да-да... но в данный момент я хочу в этом процессе придержаться
хоть каких-то общепринятых правил
". :lol:

Ну а какие правила? Ну вот взяли мы за образец "Микрон", на смену ему, устаревшему и с глюками,
пришел АССЕМБЛЕР «М&S», что он постулирует по интересующему меня вопросу?
Quote:
Все возможности АССЕМБЛЕРа «МИКРОН» сохранены и добавлены новые:
- введены операции арифметического деления и умножения, а также арифметические операции с символьно заданными псевдооператором DB байтами (например, DB 'А'+80Н);
- допускаются операции арифметического умножения (*, знаковое) и деление (/, беззнаковое);
- все арифметические операции выполняются последовательно, слева направо, БЕЗ ПРИОРИТЕТА;
- допускается использование арифметических операций с байтом, заданным в символьном виде псевдооператором DB, при этом байт должен быть одиночным (допускается: DB 'TES', ' T'+80H и не допускается: DB 'TEST'+80H);
...
Во всем остальном АССЕМБЛЕР «М&S» полностью совпадает с АССЕМБЛЕРОМ «МИКРОН»...

Значит длина строки всё те же 64 символа...

Разбор строки - видно что линейный, т.к. нет приоритетов, а значит и никаких стеков нет.
Но "функционал по вычислению выражений" реализован весьма нехилый! 8)

_________________
iLavr


14 Dec 2015 09:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
просто вычисление на стеке с учётом приоритета операций и раскрытием скобок
вот как это делал я в конце 90х в своём компиляторе RW1:
http://nedopc.cvs.sourceforge.net/viewvc/nedopc/src/rw1c/rw1_expr.c?revision=1.1.1.1&view=markup

А что-то я не увидел, где у тебя используется "вычисление на стеке с учётом приоритета операций и раскрытием скобок".
Хотя даже инструкцию вроде прочитал внимательно: http://robots.chat.ru/rw1_r.html

И ссылка на компилятор RW1 теряется вот здесь: https://sourceforge.net/projects/nedopc

_________________
iLavr


10 Oct 2018 09:59
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16997
Location: Colorado
Reply with quote
Это старая инструкция и старый репозиторий

Всё новое - тут: https://gitlab.com/nedopc/sdk/tree/master/robbyc

P.S. В частности про разбор выражений - тут:
https://gitlab.com/nedopc/sdk/blob/master/robbyc/robbyc2.c

_________________
:eugeek: https://twitter.com/Shaos1973


11 Oct 2018 19:37
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
В частности про разбор выражений - тут:
https://gitlab.com/nedopc/sdk/blob/master/robbyc/robbyc2.c
Если я всё правильно помню, размер анализируемой строки напрямую связан с размером стеков.
Это еще jdigreze тут отметил:
jdigreze wrote:
Про сложность конструкций всё ещё проще - в нормальном виде там строится бинарное дерево, под него обычно выделен определённый буфер, выход за пределы буфера - ошибка, но размер буфера задавали с небольшим запасом с учётом максимальной длины строки операндов.

Я посмотрел свои исходники, и увидел, что на момент этой беседы я алгоритм со стеками
тоже реализовал, но не вставил в окончательный вариант ассемблера - не состыковался
он у меня удобно с существующим уже разбором строки.
В этой связи мне и стало интересно - ты размер стека (aka буфера) у себя сколько задал?

_________________
iLavr


12 Oct 2018 03:05
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16997
Location: Colorado
Reply with quote
Судя по коду стек у меня на 1000 элементов создаётся - пока хватало :)
Строка тоже где-то ограничена была по длине (в другом более головном файле)
На самом деле хардкод подобного рода считается очень плохим тоном среди современных программистов :oops:
Ну что есть, то есть - как уж написал в конце 90-х, а переписывать времени нету...

_________________
:eugeek: https://twitter.com/Shaos1973


12 Oct 2018 19:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Судя по коду стек у меня на 1000 элементов создаётся - пока хватало :)
Вооооо! А у меня всего на 200, но самое смешное, я его не смог превысить своими примерами.
То есть, я не смог подсунуть в алгоритм такой выдуманный, но осмысленный пример, чтобы выйти за 200.

Shaos wrote:
На самом деле хардкод подобного рода считается очень плохим тоном среди современных программистов :oops:
Ну что есть, то есть - как уж написал в конце 90-х, а переписывать времени нету...
А вот этот момент не понял, что за "хардкод подобного рода считается очень плохим тоном среди современных программистов"?
Я тут, ты сам видел, гуглил примеры обработки строки на стеке - у всех очень похожие алгоритмы.

_________________
iLavr


13 Oct 2018 06:58
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 62 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.