Chyba pekladace

Petr Weissar weissar
Středa Březen 17 11:36:10 CET 2004


Hi All !

Tak jsem sem zase pekne "vycukal" s prekladacem C. Pouzivam Franklin 4.01 a
chtel jsem od nej prelozit toto:

bit  bbDispBlockWrite(byte *bp, word wLen)
{
 *(byte *)(bpFnBuffer+0)=FN_G_WRITE_BLOCK;

 *(byte **)(bpFnBuffer+1)=bp;
 *(word *)(bpFnBuffer+4)=wLen;
...

a on to do ASM prelozil takto:

; bit  bbDispBlockWrite(byte *bp, word wLen)

 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)=FN_G_WRITE_BLOCK;
   ; SOURCE LINE # 198
 MOV   R0,#bpFnBuffer
 MOV   A,#04H
 MOVX  @R0,A
;
;  *(byte **)(bpFnBuffer+1)=bp;
   ; 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)=wLen;
   ; 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

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
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 ...

Ale, chtel bych to zkusit i v jinem prekladaci. Mate nekdo Keil nebo
Franklin 5.x ? Muzete to zkusit ?

S pranim stastneho prekladu

            Petr

+--------------------------------+
| Ing. Petr Weissar              |
+--------------------------------+
| weissar@kae.zcu.cz             |
| adela.zcu.cz/~weissar          |
+--------------------------------+
| Zapadoceska univerzita, Plzen  |
+--------------------------------+







Další informace o konferenci Hw-list