Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

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

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Wasup!



Зарегистрирован: 14.12.2005
Сообщения: 1

СообщениеДобавлено: Ср Дек 14 2005 09:38    Заголовок сообщения: Assembler Как разделить программу на два модуля (.asm) ? Ответить с цитатой

Есть программа находящая максимальное и минимальное слово из вводимой строки. Для поиска слов используется процедура SearchMinMax параметры в которую передаются через ячейки памяти. Вывод на экран с помощью процедуры ShowWords параметры в которую передаются через стек.

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

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

Основной файл main.asm
.
Код:
model small
.stack 100h
extrn   SearchMinMax:far, ShowWords:far

StackSg segment  STACK
        db      128     dup(?)
StackSg ends

DataSg  segment public byte
SZ=80
CR=13
Lf=10
min             db      SZ dup(?),'$'                   
FH              db      'c:\txt.txt',0
...               ;объявление переменных
DataSg  ends

CodeSg  segment public byte
        assume  cs:CodeSg, ds:DataSg, ss:StackSg, es:DataSg

start:
        mov     ax,@data
        mov     ds,ax
...
call    SearchMinMax
...
call    ShowWords
...
        mov     ax,4c00h
        int     21h
CodeSg  ends
        end     start



Файл с процедурами proc.asm
Код:
PUBLIC SearchMinMax, ShowWords

codProc segment public byte
        assume  cs:codProc

SearchMinMax proc
        lea DI,str1             ;адрес строки str1 в DI
...
        ret
SearchMinMax endp

ShowWords       proc
        mov     bp,sp
        mov     ah,09H
...
        ret
ShowWords endp

codProc ends
        end


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

tasm /zi main
tasm /zi proc
tlink /v main+proc,myprog


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



Зарегистрирован: 11.10.2005
Сообщения: 35

СообщениеДобавлено: Ср Дек 14 2005 14:38    Заголовок сообщения: Ответить с цитатой

Во первых, Вы не корректно пишите функции. Функция или процедура должна писаться так, чтобы минимизировать работу с глобальными переменными: все данные нужно передавать в качестве параметров, результат - возвращать через регистры общего назначения (обычно eax и, по моему, edx).
Параметры функции передают через стек:

Код:

push par1
push par2
...
push parn
call function


Функция выбирает параметры из стека (с учётом факта, что в вершине стека 8 байт - адрес возврата из функции, помещённый туда командой call function)

Если Вы все таки хотите использовать глобальные переменные, обьявите их как public. Иначе компоновщик не сможет связать обьектные модули. Вы обьявили функцию как public, чтобы вызвать её из другого модуля, аналогично поступите и с переменными.

Я бы рекомендовал: Юров "Ассемблер учебник" издательство Питер.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...