🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #200

Ciąg Fibonacciego w czasie kompilacji

#200
From: Bogdan (bogdro)
Date: Mon, 17 Apr 2006 16:53
67 lines
2499 bytes
 Tak się tym kiedyś chwalili programiści C++, że im kompilator
generuje potrzebne liczby ciągu Fibonacciego w czasie kompilacji. Ale
my nie jesteśmy gorsi :) Odkrywając ostatnio możliwości FASMa,
napisałem makro właśnie generujące liczby Fibonacciego w czasie
kompilacji. Oto ono z przykładami użycia (deklaracje oraz w instrukcjach):

macro fibon oper, dst1, dst2, n
{
	if n = 1 | n = 2
		H = 1
	else if n > 0
		F = 1
		G = 1
		H = F + G
		if n > 3
			repeat n-3
				F = G
				G = H
				H = F + G
			end repeat
		end if
	else
		H = 0
	end if
	
	if `oper in <"db","dw","dd","dp","dq","dt","rb","rw","rd","rp","rq","rt">
		oper H
	else
		if dst2 eq
			oper dst1, H
		else
			oper dst1, dst2, H
		end if
	end if
}

fibon db,,, -1
fibon db,,, 1
fibon db,,, 2
fibon db,,, 3
fibon db,,, 4
fibon db,,, 5
fibon db,,, 6
fibon db,,, 7

fibon	mov, ax,, 5
fibon	shld, edx, eax, 6

(nawiasy ostre miały być w jednej linijce z if). Sprawdzone disasmem:

$ ndisasm ~/Asm/fasm/mac_fibon.bin
00000000  0001              add [bx+di],al
00000002  0102              add [bp+si],ax
00000004  0305              add ax,[di]
00000006  080D              or [di],cl
00000008  B80500            mov ax,0x5
0000000B  660FA4C208        shld edx,eax,0x8


 To i inne ciekawe makra wrzuciłem tutaj:
http://flatassembler.decard.net/viewtopic.php?t=20

-- 
Pozdrawiam, Bogdan                                  (Linux i FreeDOS)
Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
Prawdziwy, bezpieczny komunikator:                   www.JabberPL.org
Technical Details
Message-ID: <e20h94$g45$1@nemesis.news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: "Bogdan (bogdro)" <bogdan@bogdan.pl>
Newsgroups: pl.comp.lang.asm
Subject: Ciąg Fibonacciego w czasie kompilacji
Date: Mon, 17 Apr 2006 18:53:05 +0200
Organization: tp.internet - http://www.tpi.pl/
Lines: 67
Message-ID: <e20h94$g45$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: acty132.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1145292901 16517 83.11.78.132 (17 Apr 2006 16:55:01 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Mon, 17 Apr 2006 16:55:01 +0000 (UTC)
User-Agent: Thunderbird 1.5 (X11/20051201)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit