Chyba pekladace
Radek Benedikt
benedikt
Středa Březen 17 11:36:10 CET 2004
> Tak jsem sem zase pekne "vycukal" s prekladacem C. Pouzivam Franklin =
4.01 a
> chtel jsem od nej prelozit toto:
>=20
> bit bbDispBlockWrite(byte *bp, word wLen)
> {
> *(byte *)(bpFnBuffer+0)=3DFN_G_WRITE_BLOCK;
>=20
> *(byte **)(bpFnBuffer+1)=3Dbp;
> *(word *)(bpFnBuffer+4)=3DwLen;
> ...
>=20
> a on to do ASM prelozil takto:
>=20
> ; bit bbDispBlockWrite(byte *bp, word wLen)
>=20
> RSEG ?PR?_bbDispBlockWrite?BFUNKCE
> USING 2
> _bbDispBlockWrite:
> ;---- Variable 'bp?1148' assigned to Register 'R1/R2/R3' ----
> ;---- Variable 'wLen?1149' assigned to Register 'R4/R5' ----
> ; SOURCE LINE # 196
> ; {
> ; SOURCE LINE # 197
> ; *(byte *)(bpFnBuffer+0)=3DFN_G_WRITE_BLOCK;
> ; SOURCE LINE # 198
> MOV R0,#bpFnBuffer
> MOV A,#04H
> MOVX @R0,A
> ;
> ; *(byte **)(bpFnBuffer+1)=3Dbp;
> ; SOURCE LINE # 200
> INC R0
> MOV A,R3
> MOVX @R0,A
> INC R0
> MOV A,R2
> MOVX @R0,A
> INC R0
> MOV A,R1
> MOVX @R0,A
> ; *(word *)(bpFnBuffer+4)=3DwLen;
> ; SOURCE LINE # 201
> MOV R7,AR5 ; <---- CHYBA !!!
> MOV R0,#LOW bpFnBuffer+04H
> MOV A,R4
> MOVX @R0,A
> INC R0
> MOV A,R7
> MOVX @R0,A
>=20
> A kde je chyba ?? Cely modul ma nastaveno Bank 2 (to je videt i v =
tomhle SRC
> tim USING 2). No a prekladac na ukazanem miste pouzije AR5 misto R5. =
Ale AR5
> je registr v Bank 0. No a pak ten program nekdy chodi, podle stavu =
AR5. Dela
^^^^^^^^^ a od kdy ??, alespon Intel ASM ti neprelozi =
konstrukci a AR5 prave bez toho USING 2, neni to totiz "absolutni" =
konstanta, ale zalezi prave na USING, tedy alespon tak to autor myslel. =
Ten program Ti chodi podle toho, jestli skutecne volas tu funkci z casti =
programu, kde mas nastavenu banku registru 2 nebo neco jineho. Jinak =
receno USING je pouze direktiva urcujici jak se bude zachazet s =
parametry typu ARn, nikoliv vsak fyzicke prepnuti registru.
> to vzdy, kdyz druhy parametr (R4/R5) je typu unsigned int (word). =
Nejde to
> nijak odstranit :-( Nastesti se tam dela s in-line asm, tak jsem si to
> napsal rucne ...
bye, Radek (benedikt@login.cz)
Další informace o konferenci Hw-list