Вложений: 1
ASAM Compiler v.001.025A ...
Новые добавления.
1. Сделан 64-битовый математический блок. 10-ть знаков до и 10-ть знаков после запятой. Скорость мат-функций всего в два раза быстрее ВАСИКа. Не очень хорошё работает оптимезатор мат-функций, будет время доделаю. Пример
Код:
EQU $ASAM.PASS.ERROR=2
INCLUDE "asam-80.inc"
ORG 33025
MATH R_A-8*56+R_B/4 - 3*(SIN*R_B)
RET
VAR R_A=3
VAR R_B=-7
ASAM.MATH.INIT
Вообщем посчитает. Как вы уже поняли VAR откушает 8 байт памяти на числовую операцию. Можете не писать =??? и тогд туда автоматом пропишется 0. Совет, не резервируйте регистры с именем "A", этим вы замените все аккумуляторы на точку памяти.
Так же в мат-модуле есть внутренние регистры. Ежели вы использете хотя бы раз "MATH A=6553H.34", то под регистр "А" будет автоматически зарезервировано место.
Числовой формат: первые четыре байта это значение до запятой, последние четыре байта это значение после запятой.
2. Сделаны числовые метки. Допустим:
Код:
LAB EQU 213
POPIKLAB05 ;Как всегда кодировка винды не поддерживает нужные символы ...
В итоге мы получаем метку "POPIK00213"
3. Модернезирован макрос:
Код:
.IF (<>) THEN√
;ЧТО-то
..
.IF (<=) THEN√
;ЧТО-то
..
.IF (=>) THEN√
;ЧТО-то
..
.IF (<) THEN√
;ЧТО-то
..
.IF (>) THEN√
;ЧТО-то
..
.IF (=) THEN√
;ЧТО-то
..
Ну и теперь у вас есть ифы ... Компилятор будет искать любые вариации разделяя их жёсткими сепараторами из макросов. Как появится время опишу все главные комманды.
4. Сделаны метки с приоритетами:
Код:
.IF (=) THEN√
ASAM_INC_IFC
MATH (@.0)-(@.1)
JZ _ASAM_IF_ELSE$ASAM.ASAM.IFC03
..
.ELSE
EQUID _ASAM_IF_ELSE$ASAM.ASAM.IFC03[1]=$
..
.END IF
EQUID _ASAM_IF_ELSE$ASAM.ASAM.IFC03[2]=$
_ASAM_IF_END$ASAM.ASAM.IFC03[2]
ASAM_DEC_IFC
..
Как вы заметили оператор EQUID резервирует метку _ASAM_IF_ELSE001. В квадратных скобках указывается приоритет. В "ELSE" он имеет 1, в "END IF" он 2. Ежели вы напишите:
Код:
IF 7=7 THEN
LD A,1
END IF
В данном случае "ELSE" не учавствует в коде, и автоматически _ASAM_IF_ELSE001 будет равен _ASAM_IF_END001 и указывать на конец IF'а. Если:
Код:
IF 7=7 THEN
LD A,1
ELSE
LD A,0
END IF
То в данном случае _ASAM_IF_ELSE001 будет компилятором встречаться дважды но в "END IF" будет иметь приоритет 2 и игнорироваться.
Имея фантазию вы легко сделаете любые операторы.