Чистый код типа
оптимизатором легко разгоняется процентов на 30, ценой 3-4 кратного разбухания и общей некрасивости. И холивар это про веру...Код:mov #1000,r0 l:add r1,(r3)+ adc r2 sob r0,l
Чистый код типа
оптимизатором легко разгоняется процентов на 30, ценой 3-4 кратного разбухания и общей некрасивости. И холивар это про веру...Код:mov #1000,r0 l:add r1,(r3)+ adc r2 sob r0,l
Последний раз редактировалось litwr; 21.12.2014 в 22:53. Причина: better smiley
Санта подарки разносит.
Процентов на 25 побыстрее дожно бытьКод:mov #250,r0 l:add r1,(r3)+ adc r2 add r1,(r3)+ adc r2 add r1,(r3)+ adc r2 add r1,(r3)+ adc r2 sob r0,l
http://litwr2.atspace.eu/bk11.html
Поддерживаются (некоторые слова из бейсика БК0011):
^ \ * + - ( ) = < > <= >= =< => <> ><
? ABS AND ASC AT BIN$ BLOAD BSAVE CHR$ CLEAR CLS CSRLIN DATA DEC DEF DIM ELSE END EOF EQV FILES FIND FN FOR GET# GOSUB GOTO HEX$ IF IMP INKEY$ INP INPUT INSTR LEN LET LOCATE MID$ MOD MONIT NEXT NOT ON OR OUT PEEK POKE POS PRINT READ REM RESTORE RETURN SGN SPC STEP STR$ STRING$ SYSTEM TAB THEN TO UINT$ UPPER$ USR VAL VARPTR XOR
Не поддерживаются:
BEEP CINT COLOR KEY OCT$
CIRCLE DRAW PAINT POINT PRESET PSET
/ ATN CDBL COS EXP INT FIX LOG PI RND SIN SQR TAN CSNG
. AUTO CALL CLOAD CONT CSAVE DELETE LIST LLIST LOAD LPOS MERGE NEW RENUM RUN SAVE STOP TROFF TRON
SCREEN
Новые возможности:
+ Имена переменных могут быть любой длины.
+ Можно использовать ':' для разделения операторов. Длина строки не ограничена.
+ Новый оператор GET# позволяет получать данные из файла символ за символом, т.е. GET#a$ вводит один знак или пусто в a$ из открытого для чтения файла. Это файловый эквивалент INKEY$.
+ Новая функция DEC переводит 16-ю строку в целое, т.e., dec("a0A")=2570.
+ INSTR можно использовать с двумя аргументами, т.е., instr("abcdef", "cd") = instr(1, "abcdef", "cd").
+ Новая функция UPPER$ переводит маленькую латинскую букву в большую.
+ Новая функция UINT$ перевоит в беззнаковое целое в виде строки, т.е. UINT$(-1) gives "65535".
Неподдерживаемые или поддерживаемые ограничено возможности бейсика БК:
- Поддерживаются только целые (в диапазоне -32768..32767) и строковые (длиной до 255 знаков) типы.
- DIM нужно использовать с любым массивом (даже меньшим 10) и его числовой аргумент должен быть целой константой. Поддерживаются только массивы с одной размерностью. После DIM можно описывать только одну переменную-массив. Виртуальные массивы не поддерживаются (это верно и для VARPTR).
- Только некоторые ошибки синтаксиса обнаруживаются.
Особые замечания:
* Размер генерируемых исполнимых файлов до 32256 байт. 16384 дополнительных байт используются для строк и машинного кода. Программа стартует с адреса 512. Код использует вызовы АнДОС, которые эмулируют ПЗУ БК0010. Код не использует вызовы ПЗУ БК0011.
* Память по адресам 532-565 свободна для любого использования. Память выше адреса 16384 может переключаться, поэтому она имеет ограничения для прямого использования для машинных кодов и данных.
* Прерывания клавиатуры используются для автоповтора нажатия клавиши. Это меняет стандартную схему работы с кириллицей -- используйте AP2.
* Необходимо ставить пробелы между склеивающимися лексемами, например, 'if a<3 goto 10' требует пробелов между 'if' и 'a', а также между 'goto' и '10'.
* Страницы памяти 2, 3 и 6 используются для программ и данных. Страница 0 -- это буфер ввода-вывода. Страница 4 содержит AnDOS. Другие страницы свободны для любого использования.
* CLEAR требует в точности двух аргументов, но 1-й игнорируется, т.к. вся свободная память используется для строк. CLEAR вызывает сначала уборщик мусора. Второй аргумент устанавливает верхнюю границу памяти для бейсика. Начальное значение этой границы -- 49152.
* INPUT работает нестандартно, если использует несколько переменных для ввода. Например, 'INPUT A,B' требует ввести значения для А и затем нажатия клавиши Ввод, затем ввeсти значения для B и нажатия на Ввод.
* CSRLIN и POS игнорируют аргументы.
* FRE показывает размер всей свободной памяти. Уборщик мусора вызывается только если у аргумента строковый тип. Поэтому в случае целого или отсутствующего аргумента показанный результат может быть меньше действительного.
* FIND должен использовать какой-нибудь файловый шаблон MS-DOS. Так FIND "*.TXT" покажет все файлы с расширением TXT, а FIND "?." покажет файлы с именами, состоящими из одного знака и без расширения. Шаблоны чувствительны к регистру знаков.
* BLOAD всегдa требует 3-х аргументов, например, BLOAD "MC",,32768 или BLOAD "MC.BIN",R,47*1024.
* BLOAD и BSAVE не работают с файлом более 16 KБ.
* USRn(X) вызов кладет X в R5 и затем использует CALL. Поэтому вернуться из такой ассемблерной функции можно по инструкции RETURN. Результат следует помещать в R5.
* SYSTEM и MONIT работают как END.
* FILES идентична FIND.
* \-операция может правильно делить -32768, но игнорирует деление на 0 и переполнение.
* %-суффикс для целых переменных необязателен.
* Служебные слова нужно писать полностью, без сокращений.
Общая информация:
@ Используйте PEEK(208) and -256 для проверки состояния файла после попытки открытия. Значение должно быть 0, если операция прошла успешно.
@ Будьте осторожны с PEEK и POKE -- они игнорируют младший (четность) бит.
@ Компилятор распространяется по лицензии GNU General Public License, версии 2 или, по вашему усмотрению, более поздней версии. Эта лицензия доступна через сеть по адресу <http://www.gnu.org/copyleft/gpl.html>. GPL устроена так, что позволяет вам менять содержимое пакета и распространять его по другой схеме до тех пор, пока вы не лишаете такой свободы других.
@ Это свободный, быстрый и сделанный как попало компилятор, созданный преимущественно для компиляции программы Notepad-BK. Это не Visual Studio...
Последний раз редактировалось litwr; 11.05.2015 в 19:19.
Наверное в эту тему.
За пару часов наваял пакет для редактора Atom -- простейшую подсветку синтаксиса для языка MACRO-11. Не то чтобы сильно нужно было, просто интересно было пройти этот квест -- с нуля до публикации пакета.
https://atom.io/packages/language-macro11
Реализация там собственно -- одна регулярка. Но вдруг кому пригодится.
Изучаю кросс-ассемблер Macro-11 для Windows.
Не могу разобраться с командой "JMP 200".
В описании на процессор ВМ3 написано следующее:
000167 JMP 200 R7 001024 +4 + R7 000200
177150
ПАМЯТЬ ПАМЯТЬ
0! ! 0! !
! ! ! !
000200! ХХХХХХ ! 000200! ХХХХХХ !
! ! ! !
001024! 000167 ! 001024! 000167 !
001026! 177150 ! 001024! 177150 !
001030! ХХХХХХ ! 001030! ХХХХХХ !
! ! ! !
177776! ! 177776! !
При ассемблировании в Macro-11 получаю следующее:
1 .TITLE test_jmp
2 .ASECT
3 001024 .=001024
4 001024 000167 000200' JMP 200;
4
Почему при относительном способе адресации Macro-11 во второе
слово команды подставляет 000200' со штрихом?
По описанию на ВМ3 сложение адреса 001030 (следующего за командой
JMP) со вторым словом 177150 дает 200, что на мой взгляд правильно.
Может штрих что-то означает? Тогда что?
Николай.
Именно 200 и означает. Штрих указывает, что величину надо расчитать при компoновке. Например, если jmp 200 при загрузке окажется на адресе 400, то операнд у jmp будет один, а если на адресе 500, то на другой, с разницей в 100.
Спасибо, понял.
К Macro-11 прилагается dumpobj, который выдает .bin файл.
Но в .bin файле тоже не пересчитывается адрес.
Получается, что без компоновщика нельзя писать программы с
относительной адресацией?
А для Windows есть кросс-компоновщик?
Николай.
bin после dumpobj - это неисполнимый файл, даже если не использовать относительной адресации. Это файл для дальнейшей компoновки. Выше в теме есть ссылка на кросс-компоновщик, который делает исполнимые файлы. Сам не использую относительную адресацию, а сделать её поддержку как и перемещаемость с нечетными адресами несложно. Утилитка маленькая, если кому надо, то дело сделается - небольшое.
Скомпилировал obj2bin в Visual Studio 2015.
Пока не понял как работает.
Подставляю .obj файл - пишет стандартную фразу:
"Run this program without arguments, e.g., obj2bin <IN >OUT\n".
Запускаю отдельно - могу писать текст, но и только.
С исходником тоже не могу разобраться (по образованию не программист).
Николай.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)