Во первых для компилятора TASM.EXE переменные в UL (16 разрядном) обьявляются так:
extrn STORED_VAR:far ; переменная - STORED (Int)
extrn KP_T9_1_VAR:far ; переменная - KP_T9_1 (Float)
тоесть Вы в UL, в редакторе переменных, объявляете глобальные переменные с именем STORED и KP_T9_1. Все переменные в UL имеют имя - <имя переменной> & _VAR.
После объявления "удаленных" переменных Вы можете из своего .obj получить доступ к этим переменным. Но помните, что вы получаете только адрес переменной и сами должны понимать, что переменная может иметь разную длину (Bool - 1 b, Int - 2 b, Float - 4 b).
Пример шаблона подключаемого к UL модуля .obj :
; ==========================
; ¦ Объектный файл для UltraLogik 16
; ==========================
; Объединить несколько сегментов в группу,
; адресуемую с помощью одного сегментного регистра: Group
DGROUP group _DATA,_BSS
; ===========================================
extrn RESTORE_STATUS:far ; переменная - статус работы программы RESTORE
extrn SAVE_STATUS:far ; переменная - статус работы программы SAVE
extrn STORED_VAR:far ; переменная - контроль перекомпиляции проекта
; Регулятор T9_1
; переменные типа Boolean
extrn Auto_T9_1_VAR:far ; Упр.сигнал автомат-ручное (по True автомат)
; переменные типа Integer
extrn Max_G_T9_1_VAR:far ; Максимальное открытие заслонки (в автом.) Т9_1
; переменные типа Float
extrn Zad_T9_1_VAR:far ; Задание регулятору Т9_1
; ===========================================
; Сегмент _TEXT: code
_TEXT segment byte public 'CODE' use16
assume cs:_TEXT
assume ds:DGROUP
Seg_DGROUP dw seg DGROUP
; Функция восстановления сохряняемых переменных
public RESTOREMEM
RESTOREMEM proc near
push ax ; сохранить предыдущий ax в стек
push es ; сохранить предыдущий es в стек
push si ; сохранить предыдущий si в стек
push ds ; сохранить предыдущий ds в стек
mov ds, word ptr cs:Seg_DGROUP; устанавливаем ds:DGROUP
assume ds:nothing
mov ax, word ptr ds:STORED_VAR ; получаем значение переменной STORED типа integer (глобальная)
mov word ptr ds:STORED_VAR, ax ; записываем значение ax в переменную STORED типа integer (глобальная)
mov al, byte ptr ds:Auto_T9_1_VAR ; получаем значение переменной Auto_T9_1 в al
mov byte ptr ds:Auto_T9_1_VAR, 1 ; записываем в Auto_T9_1 True
mov word ptr ds:Zad_T9_1_VAR, ax ; записываем значение ax в младшую часть переменной Zad_T9_1 типа Float (глобальная)
mov word ptr ds:Zad_T9_1_VAR+2, bx ; записываем значение bx в старшую часть переменной Zad_T9_1 типа Float (глобальная)
mov ax, word ptr ds:Zad_T9_1_VAR ; получаем значение в ax младшей части переменной Zad_T9_1 типа Float (глобальная)
mov bx, word ptr ds:Zad_T9_1_VAR+2 ; получаем значение в bx старшей части переменной Zad_T9_1 типа Float (глобальная)
pop ds ; восстановить ds основной программы
pop si ; восстановить si основной программы
pop es ; восстановить es основной программы
pop ax ; восстановить ax основной программы
retn ; вернуться в основную программу
RESTOREMEM endp
; ---------------------------------------------------------------------------
_TEXT ends
; ===============================
_DATA segment word public 'DATA' use16
_DATA ends
; ===============================
_BSS segment word public 'BSS' use16
_BSS ends
end
; конец программы ===================
Компануете :
C:\Tasm\BIN\TASM.EXE *.ASM
В UL делаете:
Новая программа => Создание новой программы (заполняете поля)
Имя = <Имя программной вкладки>
Примечание = <Коментарий>
Синтаксис = EXT ( External Subroutine )
Статус = Start ( Auto Run ) ; если не будете запускать по call
Потом на появившейся вкладке указывате путь к скомпановому .obj и в поле Public Name выбираете нужную Вам функцию из .obj.
Всё!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!