
Сообщение от
Oleg N. Cher
Нашёл вот такую интересную ссылку:
Что позволяет предположить, что есть утилита OMSI Improver, которая умеет оптимизировать выхлоп после OMSI Pascal, да ещё и весьма неслабо. Это что-то вроде peephole-оптимизатора, заменяющего по встроенному набору правил последовательности асм-инструкций на такие же по функциональности, но более компактные. Мне конечно интересно было бы увидеть эту утилиту, если она найдётся.
Пока я только предположу, что она умеет оптимизировать несколько вызовов Write в один.
В документации написано что она делает -
The utility program IMP decrases the size of the object code produced by Pascal-1 by replacing branch/jump combinations with sigle branches when possible.
То есть, если идёт подряд BEQ xxxx / JMP yyyy (3 слова) - если yyyy отстоит недалеко, то это заменяется на BNE yyyy (1 слово).
Такая конструкция встречается в каждом IF, FOR, WHILE.
- - - Updated - - -
Вообще в этом Паскале IF, WHILE - относительно лёгкие, а вот FOR довольно громоздкий:
Код:
FOR I:=1 TO 10 DO BEGIN
WRITELN;
END;
Код:
; FOR I:=1 TO 10 DO BEGIN
MOV %5,-(6)
ADD #xxxx,%0
MOV #1,-(6)
MOV #10,-(6)
MOV 2(6),@4(6)
L1:
CMP @4(6),(6)
BLE .+6
JMP L2
; WRITELN;
JSR %7,$B36
; END;
INC @4(6)
JMP L1
L2:
ADD #6,%6
L0:
Итого - 19-21 слов на обеспечение цикла FOR (на два слова меньше если переменная объявлена первой).