flat assembler
Message board for the users of flat assembler.

Index > Main > Macro which will create the same code in the right place

Goto page 1, 2  Next
Author
Thread Post new topic Reply to topic
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 12:44
I want to write code and mark this code. Then Fasm automaticli past this code-block to new place. And i get two of the same code.
Сode blocks are not the same, but macro function must be one.
This is really to make?

И для русско-язычных.
У меня есть блок кода, блоки кода будут разные. Хочу сделать макрос который помечает блок кода и создает в указанном мною месте еще один такойже код. Такое реально сделать на Fasm-e с помощью макроса?
Вот пример как я это представляю:

MacroBegin
Code block (200 asm comands)
MacroEnd AdressToPasteCodeBlock
Post 23 Feb 2013, 12:44
View user's profile Send private message Reply with quote
comrade



Joined: 16 Jun 2003
Posts: 1150
Location: Russian Federation
comrade 23 Feb 2013, 14:24
Put the code in the macro? If the blocks of code are different, put them in separate macros. Sorry if I misunderstood. Даже по-русски не полностью понял задачу.
Post 23 Feb 2013, 14:24
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger ICQ Number Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 14:54
Comrade я вроде все понятно старался написать.
Как ты говоришь, будет накладно. Код всегда будет отличаться и у меня таких блоков может быть до сотни. И что для каждого макрос писать? Накладно. Мне именно надо что бы макрос был один который копирует любой код из одного места в другой. Короче есть рендер 3д сцены и есть рендер в Карту тени (ShadowMap). Так вот мне надо написав один раз в блоке рендера код по выводу 3д объекта , получить (что бы макрос автоматом создал такой же блок кода) в рендере тени. Что бы 2 раза не писать код руками, для этого я такой макрос хочу создать в Fasme.
Post 23 Feb 2013, 14:54
View user's profile Send private message Reply with quote
comrade



Joined: 16 Jun 2003
Posts: 1150
Location: Russian Federation
comrade 23 Feb 2013, 15:12
Macros can take parameters. You can use parameters to differentiate the behaviour as you wish. From what you described you can also use subprocedures.

Макросы берут параметры. По параметром и различай какие мелочи там надо изменят. Можно так же создать функцию. Иначе я никак не вижу.
Post 23 Feb 2013, 15:12
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger ICQ Number Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 15:32
Не помню в каком примере, но гдето встречал макрос data. Этот макрос из любого места кода заберал дату в section '.data'

По такому принципу ни как не сделать?
Post 23 Feb 2013, 15:32
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 15:33
Тоесть дата могла быть в любом месте кода, но потом при компиляции вся дата помещалась в section '.data'
Post 23 Feb 2013, 15:33
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 15:34
Жаль что Томас создатель фасма не откликаеться на подобные темы. А он бы мог точно дать ответ возможно или нет.
Post 23 Feb 2013, 15:34
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 23 Feb 2013, 16:10
comrade в макросах я немного разбираюсь. Уже года 4 на Фасме программирую. Но все равно хочеться побольше о макросах знать. Все таки мощный инструмент.
Post 23 Feb 2013, 16:10
View user's profile Send private message Reply with quote
baldr



Joined: 19 Mar 2008
Posts: 1651
baldr 23 Feb 2013, 23:27
Roman,

State your problem clearly, then it probably can be solved. How different are those code blocks? Could they be generated with parametrized macro?
Post 23 Feb 2013, 23:27
View user's profile Send private message Reply with quote
comrade



Joined: 16 Jun 2003
Posts: 1150
Location: Russian Federation
comrade 24 Feb 2013, 05:14
Roman wrote:
Жаль что Томас создатель фасма не откликаеться на подобные темы. А он бы мог точно дать ответ возможно или нет.

Извини, что мы всё остальные такие дрозды Sad

_________________
comrade (comrade64@live.com; http://comrade.ownz.com/)
Post 24 Feb 2013, 05:14
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger ICQ Number Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 24 Feb 2013, 06:51
comrade ты зря так про дрозды. Я же не наезжаю и не говорю что все знаю. Я просто пытаюсь выяснить можно или нет.
Post 24 Feb 2013, 06:51
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 24 Feb 2013, 06:55
Пишу еще раз:
MacroBegin этот макрос просто создаст локальную метку. Метка которая означает начало кода который копируем.

MacroBegin
Блок кода, разные команды(могут быть Call)
MacroEnd AdressToPasteCodeBlock

MacroEnd этот макрос определяет длинну и конец кода который копируем, а AdressToPasteCodeBlock - это адрес где будет создан такой же код блока
К примеру в подпрограмме RenderShadowMap.
Post 24 Feb 2013, 06:55
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 24 Feb 2013, 06:56
Сам блок кода может быть от 10 до сотни ассемблерных команд. Тоесть различный.
Post 24 Feb 2013, 06:56
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 24 Feb 2013, 07:03
И очень важный момент. Нужно что бы копирование делал именно макрос, а не асм код. Тоесть макрос 1 раз сгенерит код в другом месте моей программы и в екзешнике будет такой код, как если бы писал руками.
А если макрос создает асм код который копирует , то это не годиться.
Post 24 Feb 2013, 07:03
View user's profile Send private message Reply with quote
comrade



Joined: 16 Jun 2003
Posts: 1150
Location: Russian Federation
comrade 24 Feb 2013, 08:53
Roman wrote:
comrade ты зря так про дрозды. Я же не наезжаю и не говорю что все знаю. Я просто пытаюсь выяснить можно или нет.

Хаха дай пошутить Smile

_________________
comrade (comrade64@live.com; http://comrade.ownz.com/)
Post 24 Feb 2013, 08:53
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger ICQ Number Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 24 Feb 2013, 11:08
comrade радуешься что можно по русски шутить, потому что мало кто по русски понимает на этом сайте? Smile
Post 24 Feb 2013, 11:08
View user's profile Send private message Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
JohnFound 25 Feb 2013, 13:00
For data definitions, see "globals.inc" macro library in FreshLib.
Post 25 Feb 2013, 13:00
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
l_inc



Joined: 23 Oct 2009
Posts: 881
l_inc 25 Feb 2013, 19:40
Roman
Your problem statement is inconsistent and therefore causes a lot of confusion.

First you state, that you don't wanna create separate macros, because you may have hundreds of different code blocks. And afterwards you say, that you are ready to enclose specific code blocks into the MacroBegin and MacroEnd . It's still the same number of different code blocks, isn't it?

Besides AdressToPasteCodeBlock won't be a numeric address, right? Just because it's quite hard for a human to predict the address value and to change it every time something is modified in the code. So this is gonna be a label, specifically put into the location, where you want to put some code, right? Thus your notion of the solution syntax is the following:

Code:
Begin3DDisplayCode
mov eax,[eax]
End3DDisplayCode ShadowMapRender.3DDisplay
...
ShadowMapRender:
        ...
        ShadowMapRender.3DDisplay:
        ...
ret
...    

This should put mov eax,[eax] at the location of the label ShadowMapRender, right?

Now explain, why is the following somehow not the same?
Code:
macro 3DDisplayCode {
mov eax,[eax]
}
...
ShadowMapRender:
        ...
        3DDisplayCode   ;location of the ShadowMapRender.3DDisplay label from previous example
        ...
ret
...    
Post 25 Feb 2013, 19:40
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 26 Feb 2013, 12:39
Why so difficult?! I wrote all clear. Okay, I found a simple way. But not using macro. I using asm comand. This method proved easier.

Thought on this website you can learn a lot. I'm disappointed.
Too bad.
Post 26 Feb 2013, 12:39
View user's profile Send private message Reply with quote
Roman



Joined: 21 Apr 2012
Posts: 1821
Roman 26 Feb 2013, 12:43
l_inc forgive me. But you do not understand me. I say code block different.
Example:

mov ebp,[WalsNum]
and ebp,ebp
jz NoLightOnColona
mov esi,Wals
LpLineL:
mov eax,[esi]
add esi,4
mov ecx,[esi]
add esi,4

mov ebx,-9.0
Frustum NoLight1

invoke D3DXMatrixTranslation,Wor1,eax,-9.0,ecx

D3DCALL pWorldVariable, SetMatrix, Wor1

EffectApply
D3DCALL MPlanka2,DrawSubset,NULL

And another code block:

mov ebp,[WalsNum]
and ebp,ebp
jz NoLightOnColona
mov esi,Wals

Frustum NoLight1

invoke D3DXMatrixTranslation,Wor1,eax,-9.0,ecx

EffectApply
D3DCALL MPlanka2,DrawSubset,NULL
Post 26 Feb 2013, 12:43
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  
Goto page 1, 2  Next

< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.