(*~\Глагол\приложкемяLink\МПГ2009 (компилируется, но НЕ раб.?)\~~~~~ ANSI ~~~~*)
(*                                                       ОТДЕЛ Заграница;     *)
(*============================================================================*)
(* НАЗНАЧЕНИЕ: доп.задачи на ARM-ассемблере для Малого ПГ в ANSI кодировке    *)
(*============================================================================*)

ЗАДАЧА Связаться-(имя-:ЦЕПЬ):ЦЕЛ;
(* Связывание с ДПБ, имя которой <имя>. Возвращает ссылку на ДПБ или 0. *)
КОД
        IMPORT  |LoadLibraryW|
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; источники
        LDR     R0,[FP,#8] ; имя
        BL      |LoadLibraryW|
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#8
КОН Связаться; 

(******************************************************************************) 
ЗАДАЧА АдресЗадачи-(ссылка:ЦЕЛ; имя-:ЦЕПЬ):ЦЕЛ;
(* Возвращает адрес задачи из связанной по ссылке <ссылка> ДПБ,
 * имя которой <имя>. *)
КОД
        IMPORT  |GetProcAddressW|
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; источники
        LDR     R0,[FP,#16] ; ссылка
        LDR     R1,[FP,#8]  ; имя
        BL      |GetProcAddressW|
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#16
КОН АдресЗадачи; 

(******************************************************************************) 
ЗАДАЧА Отвязаться-(ссылка:ЦЕЛ); 
(* Отказ от использования ДПБ. *)
КОД
        IMPORT  |FreeLibrary|
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; источники
        LDR     R0,[FP,#8]  ; ссылка
        BL      |FreeLibrary|
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#8
КОН Отвязаться; 

(******************************************************************************)
ЗАДАЧА Вызов7-(адр,п1,п2,п3,п4,п5,п6,п7:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; последний приёмник
        LDR     R12,     [FP,#8]   
        STR     R12,[SP,#-4]!
        LDR     R12,     [FP,#12]
        STR     R12,[SP,#-4]!
        LDR     R12,     [FP,#16]
        STR     R12,[SP,#-4]!
        ; 4 первых приёмника в регистрах
        LDR     R3,[FP,#20]  
        LDR     R2,[FP,#24]
        LDR     R1,[FP,#28]
        LDR     R0,[FP,#32]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#36]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#36
КОН Вызов7;

(******************************************************************************)
ЗАДАЧА Вызов6-(адр,п1,п2,п3,п4,п5,п6:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; последний приёмник
        LDR     R12,     [FP,#8]   
        STR     R12,[SP,#-4]!
        LDR     R12,     [FP,#12]
        STR     R12,[SP,#-4]!
        ; 4 первых приёмника в регистрах
        LDR     R3,[FP,#16]  
        LDR     R2,[FP,#20]
        LDR     R1,[FP,#24]
        LDR     R0,[FP,#28]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#32]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#32
КОН Вызов6;

(******************************************************************************)
ЗАДАЧА Вызов5-(адр,п1,п2,п3,п4,п5:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; последний приёмник
        LDR     R12,     [FP,#8]   
        STR     R12,[SP,#-4]!
        ; 4 первых приёмника в регистрах
        LDR     R3,[FP,#12]  
        LDR     R2,[FP,#16]
        LDR     R1,[FP,#20]
        LDR     R0,[FP,#24]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#28]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#28
КОН Вызов5;

(******************************************************************************)
ЗАДАЧА Вызов4-(адр,п1,п2,п3,п4:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; 4 первых приёмника в регистрах
        LDR     R3,[FP,#8]  
        LDR     R2,[FP,#12]
        LDR     R1,[FP,#16]
        LDR     R0,[FP,#20]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#24]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#24
КОН Вызов4;

(******************************************************************************)
ЗАДАЧА Вызов3-(адр,п1,п2,п3:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; 4 первых приёмника в регистрах
        LDR     R2,[FP,#8]
        LDR     R1,[FP,#12]
        LDR     R0,[FP,#16]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#20]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#20
КОН Вызов3;

(******************************************************************************)
ЗАДАЧА Вызов2-(адр,п1,п2:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; 4 первых приёмника в регистрах
        LDR     R1,[FP,#8]
        LDR     R0,[FP,#12]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#16]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#16
КОН Вызов2;

(******************************************************************************)
ЗАДАЧА Вызов1-(адр,п1:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; 4 первых приёмника в регистрах
        LDR     R0,[FP,#8]
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#12]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#12
КОН Вызов1;

(******************************************************************************)
ЗАДАЧА Вызов0-(адр:ЦЕЛ):ЦЕЛ; 
КОД
        ; пролог
        STMDB   SP!,{FP,LR}
        MOV     FP,SP
        ; переход с возвратом
        MOV     LR,PC
        LDR     PC,[FP,#8]
        ; эпилог
        MOV     SP,FP
        LDR     FP,[SP],#4
        LDR     PC,[SP],#8
КОН Вызов0;
