Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > библиотека


Автор: котъ 15.2.2005, 14:15
господа профи !!!!!
объясните популярно новичку КАК СОЗДАТЬ библиотеку из
отработанных небольших программ и КАК ПОТОМ ВСТАВИТЬ
эти фрагменты в другую прогу !????????
Заколебался уже писать проги по 2-3 кб , в которых много
отработанных кусков !!!!!!!!

Я использую MASM 6.11 !!!!!!!
Пишу пока только .com программы.
Если можно то на примере :
допустим что нужно создать библиотеку в которой ТРИ отработанных
фрагмента :

sceg segment
org 100h
start:
; определение даты -- ПЕРВЫЙ ФРАГМЕНТ !!!!!!
mov ah,2ah
int 21h
........
........
; какие то дополнительные действия
........
........
; установка графического режима
mov al,12h
mov ah,00
int 10h
; построение координатной сетки--ВТОРОЙ ФРАГМЕНТ !!!!!
........
........
........
; преобразование чисел для вывода строки в графическом режиме---
----------ТРЕТИЙ ФРАГМЕНТ !!!!
.........
.........
.........
; завершение
mov ax,4c00h ; завершение программы
int 21h
mess1 db .......
mess2 db .......
.........
cseg ends
end start

Как создать библиотеку из указанных трех фрагментов ?
Как потом эти фрагменты вставить в новую аналогичную программу ????
Для работы с MASM 6.11 !!!!!
Спасибо !!!!!!!

Автор: Akina 15.2.2005, 15:17
Цитата
Как создать библиотеку

1) убрать org, start и end start
2) объявить процедуры как public
3) скомпилить в obj (masm)
4) собрать в либу (lib или около того)

Цитата
Как потом эти фрагменты вставить в новую аналогичную программу

1) описАть в программе процедуры как external
2) использовать как будто текст вставлен в программу
3) при линковке указать еще и созданную ранее либу с этими функциями

Есть вариант и попроще - инклюдить в текст программы файлы с процедурами

Автор: котъ 16.2.2005, 13:20
СПАСИБО !!!!!
СЕГОДНЯ ПОПРОБУЮ!!!!!

Автор: Akina 16.2.2005, 13:23
Рекомендация - каждую подпрограмму оформлять отдельным модулем, компилять отдельно и пихать в либу. Ибо если в модуле 3 функции, при вызове любой из них прилинкуется все три.
И не запутайся с сегментами и константами, используй локальные метки и протчая - а то пересечешься с основной прогой и будет тебе щастье по выискиванию глюков...

Автор: oleg1973 18.2.2005, 19:10
так как я предпочитаю фасм, то сделал я для своих нужд большой файл-инклуд в котором напихал кучу процедур натболее часто пользуемых
оформив их в виде
Код

proc Myproc
    enter
    somecode....
    return
endp

фасм имеет удобное свойство, не компилировать процедуры которые не вызываются

Автор: котъ 24.2.2005, 08:53
Akina !!!!!! oleg1973 !!!!!!!

попробовал оба способа
INCLUDE ---- работает !!!!!! , правда на простейших примерах .
одно неудобство ----- приходится следить за метками и менять их,
если фрагмент вставляется в прогу многократно .

public и external почему то не получилось, не проходит lib.exe
может у меня masm611 кривой --- скачал его у Калашникова
по его же рекомендации.

НЕ ЯСНО только -- зачем использовать public и external ,
если инклюдирование проще !!!!!!
Какие приемущества и недостатки у каждого способа ?????/



Автор: Akina 24.2.2005, 09:19
Цитата
INCLUDE ---- работает !!!!!! , правда на простейших примерах .
одно неудобство ----- приходится следить за метками и менять их,
если фрагмент вставляется в прогу многократно .

Работает всегда. Программить надо по-человечески просто. Использовать локальные метки. Использовать условное подключение.

Цитата
public и external почему то не получилось, не проходит lib.exe
может у меня masm611 кривой --- скачал его у Калашникова
по его же рекомендации.

А я думаю что тебе все-таки неплохо доку по синтаксису почитать. Для данного диалекта Асма.

Цитата
зачем использовать public и external ,
если инклюдирование проще !!!!!!
Какие приемущества и недостатки у каждого способа ?????/

Пока ты кропаешь поделки размером в сотню байт - инклюдь и не забивай себе голову. А когда дело дойдет до мультисегментного кода в десятки-сотни килограмм, да еще не дай Бог вмногером кодить - ты сдохнешь под своими инклюдами.

Автор: котъ 24.2.2005, 15:24
Akina !!!!!!!!!!!!!!
полностью с тобой согласен , что я еще чайник !!!!!!!!!!
вот и пытаюсь учиться !!!!!!!!
ты бы хоть похвалил , а то всего обругал !!!! -- может и правильно....

Ты вот пишешь ---INCLUDE Работает всегда.Программить надо по-человечески просто. Использовать локальные метки. Использовать условное подключение.

Ну так поясни коротко и популярно , что это такое .
Тебе ведь не трудно пояснить на простом примере.

А относительно public и external привел бы подробно простейший пример----
----- например вставка в программу фрагмента из одной команды
типа mov a,b но со всеми этапами. Для DOS.
Очень тебе буду благодарен !!!!!!!!!!!

Ведь кого не спросишь ---- то все и смеются !!!!!! говорят дурак я
что ассемблер учу !!!!! советуют всякие паскали бийсики и прочее!
А по ассемблеру спецов днем с огнем не сыщешь !!!!!

Добавлено @ 15:27
я пытался у Калашникова найти , но как то не совсем понятно , о чем он
пишет !!!!! все вирусы рассматривает и оболочки , а фундаментального
простейшего материала мало дает .

Автор: котъ 24.2.2005, 15:37
КСТАТИ , я неплохо шарю в аналоговой технике , так что и ты можешь
у меня в этом спрашивать , если интересно, конечно.

Автор: Akina 24.2.2005, 15:45
Цитата
ты бы хоть похвалил , а то всего обругал

а за что? за то что тебе лень воспользоваться поиском и читать гору манов? расчитываешь что тебе будут разъяснять значение терминов "локальные метки" и "условное подключение"? да ни в жисть... этого добра (разъяснений то есть) в Инете - горы. Только бери. Начни, к примеру, http://www.citforum.ru/programming/asm.shtml.

Цитата
относительно public и external привел бы подробно простейший пример

см. выше. там ВСЕ есть.

Цитата
говорят дурак я что ассемблер учу

Если это оправдано целью - они неправы. Учить ради того чтобы хоть чем-то заняться или на случай "а вдруг пригодится" - тоже можно. Впрочем сначала сделать, а потом придумать зачем оно сделано - как-то странно...

Хочешь чтобы тебя похвалили? Разберись в этом вопросе (что как делается, когда что разумнее, какие есть грабли и как их обойти) и напиши небольшую, компактную, с примерами, статейку в ФАК. Вот это будет дело достойное...

И эта... одного восклицательного знака вполне достаточно.

Автор: котъ 25.2.2005, 11:05
Akina !!!!!!
спасибо за совет !!!
в общем то ты прав !!!!------ мне немного лень !
я ваще то спец по аналогу , но программирую и микроконтроллеры.
а ассемблер необходим для обработки данных с МК на компе.
другие языки почему то не интересны , а тут некая аналогия
с микроконтроллерами , да и машину можно изучить--- это самое
главное !!!!!! . И ваще то получается.

В плане локальных меток я действительно не искал -- грешен .

Но в плане public и external действительно немного помучался !!!!!!
Вот здесь то не грешил !!!!!!! но не получается !!!!!!
Просто везде где читал написано общими словами без понятных
примеров.
Вот и попросил тебя здесь подробнее разьяснить .
Пограммирую только с октября прошлого года и мне бы было интересно
узнать твое мнение относительно готовых уже работающих программ.
Можно тебя попросить просмотреть их и дать рецензию ??????-------
------- там все с коментариями , быстро будет.
Может изменишь свое мнение и с public & external поможешь разобраться.

Автор: котъ 25.2.2005, 12:19
кстати, объясни пожалуйста --- можно ли пользоваться материалом писанным для TASM ---- для MASM6.11 в сети почти ничего нет

Автор: Akina 25.2.2005, 12:22
Хрен с тобою.
Пример:

Файл 1.asm
Код

cseg    segment
assume  cs:cseg, ds:cseg
extrn   change:near
        org 100h
start:
        lea dx,mess
        mov ah,9
        int 21h
        lea bx,messnum
        call change
        lea dx,mess
        mov ah,9
        int 21h
        int 20h
mess    db 'Message '
messnum db '1',0dh,0ah,24h
cseg    ends
end     start


Файл 2.asm
Код

cseg   segment
assume ds:cseg
public change
change proc near
       inc byte ptr ds:[bx]
       ret
change endp
cseg   ends
       end


Сборка (для TASM 3.1):
tasm 1.asm -> 1.obj
tasm 2.asm -> 2.obj
tlink /t 1.obj+2.obj -> 1.com
td 1.com -> возможность посмотреть в трассере что получилось в коде, и на экране - как работает.
Добавлено @ 12:29
Цитата
можно ли пользоваться материалом писанным для TASM ---- для MASM6.11 в сети почти ничего нет

а доку по МАСМу почитать???

Автор: котъ 25.2.2005, 14:21
Akina !
СПАСИБО !!!!!! ДОБРЫЙ ТЫ ЧЕЛОВЕК !!!
А ПРОГИ МОИ ХОЧЕШЬ ПОСМОТРЕТЬ ??/
Я CТАРАЛСЯ , МОЖЕТ ЧО ОРИГИНАЛЬНОЕ СЛЕПИЛ по своему невежеству-
--- бывает и такое , МОЖЕТ И НЕ ОЧЕНЬ .
Ваще то я не совсем дурак и своих разработок -- в аналоге, правда --
у меня не один десяток .
Кстати , зря ты на меня наехал , в сети действительно TASM и указания
на локальные метки и прочее в его как бы эмуляции MASMа-----
------может я не совсем грамотно выразился , но все равно не ясно до конца - будут ли эти кирпичи работать в чистом MASMе 611 ????
просто у меня опыта работы очень мало, вот и не могу сразу ориентироваться. Потому не злись сильно на вопросы , которые тебе
кажутся глупыми.

Автор: Akina 25.2.2005, 14:27
а попробуй, ёлы-палы... только собирай в ДОС-окне, чтобы матюги компилера-линкера видеть...

Насчет смотреть - ежели вправду, то не люблю рыться в чужом коде. У прынципе. Пока не подопрет, конечно... если полагаешь что твои реально работающие программы кому-то могут быть полезны и/или интересны - ну выклади ты их с исходниками на всеобщее оборзение, благо халявных сервантов под паги счас как грязи... тебе ж даже скрипты под то не надобны... а тут (али еще где) УРЛу соответственно.

Автор: котъ 28.2.2005, 09:48
привет Akina !!!!!!
Команды TASMа не годятся , чтобы использовать локальные метки
в MASM611
А в MASMе611 избежать повторения меток при применении INCLUDE
можно используя LOCAL но только в МАКРОКОМАНДАХ !!!!!!!

Иначе никак!!!!!!------я все проверил.
Наверно вопрос можно считать исчерпаным .

Автор: котъ 28.2.2005, 14:45
Akina , привет !!!!!!
тему наверно можно закрывать -----
----- TASM инструкции локальных меток а MASM не работают.
А директивой LOCAL для создания неповтряющихся меток можно
пользоваться только в макрокомандах --- я все проверил !!!- как умел.
ТАК что INCLUDE вне макрокоманды при многократных вложениях
дает повторяющиеся метки !!!!!!!

Автор: Akina 28.2.2005, 15:02
Ну и закрывай - не я ж за тебя это делать буду...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)