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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 20:59   #1
Paradoxer
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 12
По умолчанию Библиотека процедур

Есть процедурка. Необходимо её запихнуть в библиотеку процедур (или с внешним вызовом (.LIB), или как макрокоманду, или как файл дерективы INCLUDE). Подскажите пожалуйста что проще и, если можно - примерчик. Буду очень благодарен.
Paradoxer вне форума Ответить с цитированием
Старый 14.06.2009, 21:05   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

На масме например есть "библиотекарь" (вроде Lib.exe) для создания библиотек .lib. Создает он их из объектных файлов.
Д'якон вне форума Ответить с цитированием
Старый 14.06.2009, 21:15   #3
Paradoxer
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 12
По умолчанию

Прога написана для TASM. Вопрос в том, как эту процедуру изменить, чтоб можно было запихнуть в библиотеку и как её потом использовать.
Paradoxer вне форума Ответить с цитированием
Старый 14.06.2009, 21:36   #4
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

На самом деле проще чем через include не TASM'е нельзя! Можно создать,например, main.asm, а затем подключить его к основному проекту include main.asm
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 14.06.2009, 21:45   #5
Paradoxer
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 12
По умолчанию

Код:
.MODEL SMALL
.386
.387
.DATA
pp dd ?
ppp dd 1.0
Y  Dw 2
n  dw 3
x  dd 0.5
Number_dec dd ?
.CODE
.STARTUP

CALC PROC NEAR
mov cx, n;
fld x
fstp pp
fld ppp
fld pp
lp:
dec cx
FiLD Y
FADD ST, ST(0)
FLD1
fSUB
FLD X
FMUL
FLD PP
FMUL
FiLD Y
FLD1
FSUB
FLD ppp
FMUL
FSUB
FiLD Y
FDIV
FLD PP
FStp PPP
FStp PP
jcxz endpr
INC Y
FLD PP
leave
jmp lp
endpr: FLD PP
FStp Number_dec
call outfloat
RET
CALC ENDP

outfloat proc   near
;вывод...
.EXIT
ret
outfloat endp
мне нужно процедуру calc запихнуть в библиотеку. Тоесть просто вырезаю её вместе с определениями констант, пихаю в файл proc.asm, добавляю include proc.asm (сктати где это писать?после .387?) и оба файла компилю? у меня ещё эта процедура ссылается на процедуру outfloat в основном файле.
Paradoxer вне форума Ответить с цитированием
Старый 14.06.2009, 21:53   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Да. Просто копируйте! Подключают обычно в самом начале. Желательно создать jmp на метку, который обходит includ'ы. Пример:
Код:
...
Start:
   jmp Begin
        include proc.asm
Begin:
...
Компилируется только один файл-главный!!!
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 14.06.2009 в 21:57.
MalCer вне форума Ответить с цитированием
Старый 14.06.2009, 22:15   #7
Paradoxer
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 12
По умолчанию

Не видит процедуры, которая вызывается из файла библиотеки. Пишет, мол неизвесный идентификатор.
Paradoxer вне форума Ответить с цитированием
Старый 14.06.2009, 22:28   #8
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Попробую объяснить на конкретном примере.
Цель: создать прогу, которая требут от пользователя нажатия клавиши и затем вывести любое сообщение
Сначала опишем главную программу:
Код:
.286 
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
        jmp Begin

include KEYBOARD.asm

Begin:
        mov ah,9
        mov dx,offset Mess_about
        int 21h			
        int 20h
Mess_about db 'You press key$'
CSEG ends
end Start
Теперь опишем KEYBOARD.asm:
Код:
Pause proc
      mov ah,10h
      int 16h
      ret
Pause endp
Все! Компилим и все готово!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 14.06.2009, 22:45   #9
Paradoxer
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 12
По умолчанию

Основная программа
Код:
.386 
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
        jmp Begin

include proc.asm

Begin:
outfloat proc   near
;процедура по выводу даных, полученых из процедуры calc ;файла proc.asm
.EXIT
        ret
outfloat endp

end Start
Файл proc.asm
Код:
.MODEL SMALL
.386
.387
.DATA
pp dd ?
ppp dd 1.0
Y  Dw 2
n  dw 3
x  dd 0.5
Number_dec dd ?
.CODE
.STARTUP
CALC PROC NEAR
mov cx, n;
fld x
fstp pp
fld ppp
fld pp
lp:
dec cx
FiLD Y
FADD ST, ST(0)
FLD1
fSUB
FLD X
FMUL
FLD PP
FMUL
FiLD Y
FLD1
FSUB
FLD ppp
FMUL
FSUB
FiLD Y
FDIV
FLD PP
FStp PPP
FStp PP
jcxz endpr
INC Y
FLD PP
leave
jmp lp
endpr: FLD PP
FStp Number_dec
RET
CALC ENDP
end
после этого должна выполнятся процедура из основного файла

Я чувствую, что я туплю....
Paradoxer вне форума Ответить с цитированием
Старый 14.06.2009, 22:51   #10
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Цитата:
Я чувствую, что я туплю....
Ага
Не нужно оформлять proc.asm как программу. Достаточно будет оформить в виде процедуры и вызывать её из программы
Код:
CALC PROC 
...
RET
CALC ENDP
Это весь файл proc.asm! Больше в нем ничего не должно быть
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 14.06.2009 в 22:54.
MalCer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив процедур garik Общие вопросы Delphi 0 18.03.2009 21:08
область видимости процедур Uli9 Общие вопросы Delphi 16 06.12.2008 21:09
Глобальность функций и процедур rivers Общие вопросы Delphi 5 01.08.2008 20:35
Присвоение процедур компонентам N!ckeL Компоненты Delphi 4 26.04.2008 18:22
Создание процедур Viteef Общие вопросы Delphi 3 11.05.2007 01:25