Во первых для компилятора 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.
Всё!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!