А как можно собрать вот это?)
А как можно собрать вот это?)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Можно доработать транслятор.
Я глянул файлы и заметил один конфликт с существующим компилятором. У меня любое некомпилируемое слово - это метка. Число - метка. Двоеточние необязательно и переводы строки игнорируются. Меня просили так сделать, потому что был какой то такой компилятор.
Вот например:
А в файлах выше - любое число выводится как байт (аналог .BYTE или DB). Или слово.Код:LABEL1 MOV R0, R1 MOV R2, R4 MOV R3, R6 2 MOV R4, R5 LABEL2 LABEL3 NOP NOP NOP LABEL 4 NOP NOP
Если совместить вольности всех ассемблеров, то получится какой то Форт. Что бы мы не написали - оно скомпилируется.Код:TBIKLC: 0*2+TBPKL0,1*2+TBPKL0,2*2+TBPKL0,3*2+TBPKL0,4*2+TBPKL0 0*2+TBPKL1,1*2+TBPKL1,2*2+TBPKL1,3*2+TBPKL1,4*2+TBPKL1 0*2+TBPKL2,1*2+TBPKL2,2*2+TBPKL2,3*2+TBPKL2,4*2+TBPKL2 0*2+TBPKL3,1*2+TBPKL3,2*2+TBPKL3,3*2+TBPKL3,4*2+TBPKL3
Еще и макросы прямо в код!
Это вообще что делает и как компилить?Код:MOV #OV460,@#460 MOV #340,@#462 CALL PPSTAR AR2TY #242 TY #60 TY #14 AR2TY #240 TY #66 AR2TY #241 TY #60 TY #35,#23.,#0,#2 RESTAR: MOV #50.,WERXOR MOV #5,GORXOR
- - - Добавлено - - -
Как время появится, заменю локальные метки с чисел на числа с долларом. Это решает проблемы с командами перехода. Число в аргументе команды это метка или смещение? И вообще с локальными метками.
Добавлю include. Перекинуть код из другого проекта - это не долго.
Добавлю режимы:
Включить/выключить перевод строки
Включить/выключить : в метках
Включить/выключить обязательное использование .DB
Последний раз редактировалось vinxru; 12.05.2016 в 11:05.
Так и делаю. т.е. делал изредка, когда приперало. Просто при этом все мои исходники приходится приводить в строгое соответствие со стандартами макро11. А я не пользуюсь РТ11 и не пишу для неё, я на БКшке Андосом как самым простым средством пользуюсь. А кросс средства, если они идут в виде исходников, всегда под свои нужды допилить можно. И очень раздражает всего 6 символов в метке. Самоочевидные уникальные имена быстро заканчиваются.
До макро11 довольно много дорабатывать придётся, исходники выше - именно каноническое макро11.
Плохое решение, ставшее следствием необязательности двоеточия после метки.
И число не всегда должно быть меткой, в некоторых случаях оно должно быть числом - абсолютным адресом.
В зависимости от типа ассемблерной команды нужно по-разному парсить аргументы.
Например. В командах ветвления и SOB допускаются арифметические выражения с числами и глобальными метками или локальная метка.
В командах, где 6-битовые поля [адресация][регистр] типа TST, MOV и т.п. допускаются арифметические выражения с числами и глобальными метками, а локальная метка - ошибка компиляции. Если арифметическое выражение - просто одно число, - то это адрес, тип адресации 6 или 7 если есть '@'.
В командах типа EMT, MARK допускаются арифметические выражения с числами и глобальными метками (константными переменными), которые на данный момент уже определены, не определены - ошибка компиляции.
В арифметических выражениях не допускаются локальные метки, т.к. непонятно, как их от чисел отличать. Т.к. во многих ассемблерах локальной меткой считается любое слово, начинающееся с цифры и заканчивающееся двоеточием. И эта конструкция конфликтует с любым типом записи чисел, хоть префиксной, хоть постфиксной.
В общем - нужно писать несколько разных специализированных парсеров выражений, для разных конкретных случаев.
А переводы строки вроде бы все компиляторы игнорируют, кроме спец. случаев. Перевод строки используется чтобы найти конец комментария и сгенерировать ошибку, если он встретится внутри ограничивающих символов команды .ASCII
И как правило, совсем не так, как ожидали. Так что лучше и не пытаться делать универсальный комбайн.
В командах ветвления - однозначно метка (в нормальных ассемблерах), иначе никак не отловить ошибку неверного перехода.
- - - Добавлено - - -
Лучше знак доллара внести в разрешённые символы для метки, считать его ещё одной буквой. Т.к. A$BLK1 - вполне себе легальное имя метки, как и 30$2$
Последний раз редактировалось gid; 12.05.2016 в 14:57.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)