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