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