Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 00:05   #1
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию Размещение процедур в другом модуле

Здраствуйте. Решил выполнить элементарное задание (на tasm) - вывод ASCII$ строки на консоль, но при этом разместил процедуру вывода в другом модуле. Вот что вышло:

Первый модуль:
Код:
.model small
.stack 100h
.data
stroka db '12345','$'
.code
extrn vuvod
start:
mov ax,@data
mov ds,ax
call vuvod
mov ah,8
int 21h
mov ah,4ch
int 21h
end start
Второй модуль:
Код:
include asci.asm ; название первого модуля
.model small
.code
public vuvod
vuvod proc
mov ah,9
mov dx,offset stroka
int 21h
vuvod endp
end
Все компилируется, но при линковке выдается сообщение о том, что процедуры vuvod нет в первом модуле, и все-равно создается ехе файл, который ничего не выводит. Собственно в связи с этим у меня вопрос: как сделать, что б вот оно работало? Заранее спасибо за помощь.
Teor вне форума Ответить с цитированием
Старый 12.12.2010, 02:10   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

А разве не наоборот надо - к первому второй подключать, ну или по крайней мере это правильнее, наверное. Хотя, это тогда не очень честный модуль получается, объектника же на него тогда не будет? Ну я чёт поизвращался с TASM-ом, вобщем не получилось тоже собрать из двух объектных один нормальный екзешник, поэтому предлагаю так:

-первый модуль, тот файл (один), который компилируется.

Код:
.model small
.stack 100h
.data
stroka db '12345','$'
include modul.asm
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
call vuvod
mov ah,8
int 21h
mov ah,4ch
int 21h
end start
-второй "модуль", а вобщем-то не модуль, а просто кусок с функциями.
Код:
;это доп. модуль
.model small
.code
vuvod proc
mov ah,9
mov dx,offset stroka
int 21h
ret
vuvod endp
А скажите, как вы их компилировали, линковали, прям комм. строку?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 12.12.2010, 12:41   #3
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию

Я подключил первый ко второму просто из логики, что второму модулю необходимо знать что такое "stroka".
Компилил так:
tasm asci.asm
tasm modul.asm //создалось 2 объектника
tlink asci.obj modul.obj //создается ехе с ошибкой про которую я говорил
Ulex, ваш способ достаточно интересный, в случае, если не получится сделать "правильно", буду его использовать, тем более что он работает
Teor вне форума Ответить с цитированием
Старый 12.12.2010, 13:01   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Я понял. Их вообще подключать друг к другу не надо, главное public с extrn-ом правильно написать.
К примеру вот такая конструкция скомпилилась и слинковалась потом из двух объектников и даже работает

Это голова - asci
Код:
.model small
extrn vuvod:NEAR
public stroka
.stack 100h
.data
stroka db '12345','$'
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
call vuvod
mov ah,8
int 21h
mov ah,4ch
int 21h
end start
-это модуль- modul:
Код:
.model small
public vuvod
extrn stroka
.code
vuvod proc
mov ah,9
mov dx,offset stroka
int 21h
ret
vuvod endp
end
Вот, а теперь это вроде как даже честные объектные модули.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 12.12.2010, 14:57   #5
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию

Спасибо за помощь, это именно то, что нужно
Еще вопрос возник: а если объявить тип структуры в одном модуле, то как сделать, что б этот тип был виден и в другом модуле?

Последний раз редактировалось Teor; 12.12.2010 в 16:03.
Teor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
InputQuery в модуле QDialogs _SERGEYX_ Общие вопросы Delphi 2 03.12.2010 17:44
Как обратиться к переменой в другом модуле. nusik Общие вопросы C/C++ 5 02.07.2009 14:56
вызвать метод класса, находящегося в другом модуле zalum Общие вопросы Delphi 4 06.05.2009 08:47
MidletPascal Модуль в модуле Kn793 Помощь студентам 4 25.09.2008 22:45