Как разделить программу на два модуля ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Guest in the shell, 14 дек 2005.

  1. Guest in the shell

    Guest in the shell New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2005
    Сообщения:
    2
    Есть программа (TASM) находящая максимальное и минимальное слово из вводимой строки. Для поиска слов используется процедура SearchMinMax параметры в которую передаются через ячейки памяти. Вывод на экран с помощью процедуры ShowWords параметры в которую передаются через стек.



    Каким образом разделить программу так, чтобы основной код находился в одном файле main.asm, а процедуры в другом, proc.asm?



    Пробовал так:



    Основной файл main.asm
    Код (Text):
    1.  
    2. model small
    3. .stack 100h
    4. extrn   SearchMinMax:far, ShowWords:far
    5.  
    6. StackSg segment  STACK
    7.         db      128     dup(?)
    8. StackSg ends
    9.  
    10. DataSg  segment public byte
    11. SZ=80
    12. CR=13
    13. Lf=10
    14. min             db      SZ dup(?),'$'                    
    15. FH              db      'c:\txt.txt',0
    16. ...               ;объявление переменных
    17. DataSg  ends
    18.  
    19. CodeSg  segment public byte
    20.         assume  cs:CodeSg, ds:DataSg, ss:StackSg, es:DataSg
    21.  
    22. start:
    23.         mov     ax,@data
    24.         mov     ds,ax
    25. ...
    26. call    SearchMinMax
    27. ...
    28. call    ShowWords
    29. ...
    30.         mov     ax,4c00h
    31.         int     21h
    32. CodeSg  ends
    33.         end     start
    34.  






    Файл с процедурами proc.asm
    Код (Text):
    1.  
    2. PUBLIC SearchMinMax, ShowWords
    3.  
    4. codProc segment public byte
    5.         assume  cs:codProc
    6.  
    7. SearchMinMax proc
    8.         lea DI,str1             ;адрес строки str1 в DI
    9. ...
    10.         ret
    11. SearchMinMax endp
    12.  
    13. ShowWords       proc
    14.         mov     bp,sp
    15.         mov     ah,09H
    16. ...
    17.         ret
    18. ShowWords endp
    19.  
    20. codProc ends
    21.         end
    22.  




    Компилировать пробовал так:

    Код:



    tasm /zi main

    tasm /zi proc

    tlink /v main+proc,myprog





    Но при компиляции proc.asm выдается ошибка, что переменные str1, min, max и т.д. не определены. Хотя по идее файлы должны объединятся, и объявление переменных в main.asm должно учесться в proc.asm?



    Буду благодарен за любую помощь
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    а tasm разве директиву include не понимает?
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Guest in the shell

    объявление переменных в main.asm должно учесться в proc.asm

    Не должны.

    Ты ведь позаботился об extrn SearchMinMax:far, ShowWords:far в main.asm, позаботься и об обратном. Кстати почему far?
     
  4. Guest in the shell

    Guest in the shell New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2005
    Сообщения:
    2
    т.е. в модуле proc.asm надо просто перечислить все используемые переменные из main.asm

    extrn str1,min,max..

    ?
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Guest in the shell

    Да. Только делается это (см. сообщение Asterix) при помощи заголовочных файлов.