Chyba pekladace

Radek Benedikt benedikt
Středa Březen 17 11:36:08 CET 2004


> >> A kde je chyba ?? Cely modul ma nastaveno Bank 2 (to je videt i v =
=3D
> >tomhle SRC
> >> tim USING 2). No a prekladac na ukazanem miste pouzije AR5 misto =
R5. =3D
> >Ale AR5
> >> je registr v Bank 0. No a pak ten program nekdy chodi, podle stavu =
=3D
> >AR5. Dela
> >
> >                   ^^^^^^^^^ a od kdy ??, alespon Intel ASM ti =
neprelozi =3D
> >konstrukci a AR5 prave bez toho USING 2, neni to totiz "absolutni" =
=3D
> >konstanta, ale zalezi prave na USING, tedy alespon tak to autor =
myslel. =3D
> >Ten program Ti chodi podle toho, jestli skutecne volas tu funkci z =
casti =3D
> >programu, kde mas nastavenu banku registru 2 nebo neco jineho. Jinak =
=3D
> >receno USING je pouze direktiva urcujici jak se bude zachazet s =3D
> >parametry typu ARn, nikoliv vsak fyzicke prepnuti registru.
>=20
> No a prave to mi takhle nefunguje. Kdyz natvrdo napisu v in-line asm =
presun
> z registru R4 a R5, tak program chodi (takze banka je prepnuta dobre), =
pokud
> se to prelozi s AR5, tak nechodi a dava se tam 0, coz je nejcastejsi =
obsah
> toho R5 v RB0. To je odzkouseny experimentalne a opakovane. Neznamena
> nahodou ten AR5 shanuti primo na registr podle jeho adresy v RAM ?? =
(Bez
> ohledu na nastavenou RB ??) To prece jde, ne ??

Ver mi, ta konstrukce s AR5 se prelozi naprosto korektne, nicmene to ze =
mas nastaveno RB2 bych rekl ze si opravdu myslis. Neplet se USING 2 rika =
prekladaci pouze, ze se bude pouzivat RB2, ale nikoliv ze je prepnuta =
RB2, to je nutno zabezpecit pred volanim.

WIN32 MACRO ASSEMBLER A51 V6.03.00
OBJECT MODULE PLACED IN C:\BENEDIKT\TEST.OBJ
ASSEMBLER INVOKED BY: A51.EXE C:\BENEDIKT\TEST.A51 =
OJ(C:\BENEDIKT\TEST.OBJ) PIN(C:\PROGRAM FILES\FSI\INC) EP LINES =
PR(C:\BENEDIKT\TEST.LST) XR DB PW(80) RB(0)=20

LOC     OBJ           LINE    SOURCE
                         1    	USING 0
0000    E505             2    	MOV	A,AR5
                         3    	USING 1
0002    E50D             4    	MOV	A,AR5
                         5    	USING 2
0004    E515             6    	MOV	A,AR5
                         7    	USING 3
0006    E51D             8    	MOV	A,AR5
                         9    	END

REGISTER BANK(S) USED : 0 1 2 3=20

ASSEMBLY COMPLETE.   0 WARNING(S)   0 ERROR(S)

	Prelozis-li to Keilem, ci Intelem dopadne to stejne. Pokud mas problem =
a nevis v jake registr bance bude ta tva procedura volana, tak zakaz =
prekladaci pouzivat absolutni adresy registru, on pak pouzije =
konstrukci:
	mov	a,r5
	mov	r7,a
misto
	mov	r7,ar5

	bye, Radek (benedikt@login.cz, benedikt@lphard.cz)






Další informace o konferenci Hw-list