Uživatelské nástroje

Nástroje pro tento web


lnxspectrum:asm_namespace

Používání Návěstí a NameSpaces

Kompiler umožňuje používat řády v Návěstích, jako NameSpace. Řády jsou podobně jako u WWW adres oddělené tečkami. Hlavní Návěstí, které určuje NameSpace nezačíná tečkou, a před použitím návěstí druhého řádu (návěstí začínající tečkou) musí být definováno. Příklad:

		org	32768

Start		di
		ld	hl,0
.loop		ld	de,16384
		ld	bc,6912
		ldir
		jr	.loop

V následujícím obrázku vidíme, jaké nám kompiler vytvořil návěstí. Hlavní je návěstí prvního řádu Start, které zároveň definuje NameSpace. Takže každé návěstí druhého řádu (to bude začínat tečkou) bude vždy na začátku obsahovat Start. Když v našem případě napíšeme…

		jr	.loop

nebo

		jr	Start.loop

…bude se jednat o stejné návěstí. První ale bude fungovat jen v případě že se nacházejí ve stejném NameSpace. Návěstí i s NameSpacem, tedy Start.loop musíme použít pokuď ho chceme volat z jiného NameSpace:

		org	32768

Start		di
		ld	hl,0
.loop		call	Posuv.run	;Instrukce call se nachází
		jr	.loop		;v NameSpace "Start"
	
Posuv					;ale ".run" je v NameSpace "Posuv".
.run		ld	de,16384
		ld	bc,6912
		ldir
		ret

Největší výhodou návěstí o více řádech je v tom, že jeho název můžeme použít znovu v novém NameSpace. V následujícím příkladu máme dvě návěstí .loop, ale pokaždé se jedná o úplně jiné návěstí / jinou adresu:

		org	32768
	
Label1
.loop		nop
		jr	.loop
	
Label2
.loop		nop
		jr	.loop

Víceřádové návěstí

Je možné používat i více než jeden řád. Díky tomu se dají napsat celé knihovny funkcí.

		org	32768

		call	Grafika.cls
		call	Grafika
		ret

Grafika.cls	nop			;návěstí prvního a druhého řádu
.loop		nop			;návěstí třetího řádu
		djnz	.loop
		ret

Grafika.line	nop			;návěstí prvního a druhého řádu
.loop		nop			;návěstí třetího řádu
		djnz	.loop
		ret
	
Grafika		call	.line		;Volá Grafika.line
		ret	

Všimněte si na konci programu návěstí prvního řádu Grafika, která nepokračuje návěstím druhého řádu, ale protože se shoduje s předchozím návěstím prvního řádu, nemusí ho v call .line uvádět.

lnxspectrum/asm_namespace.txt · Poslední úprava: 2021/01/28 23:42 autor: lanex