014
29.08.2009, 11:27 Uhr
Olli
|
Nun habe ich auch noch rausgefunden, wie man Floating Point Funktionen unter WEGA "disassembliert" und auch noch im PLZ/ASM (oder cas) verwendet... bringt zwar nix, da wir gar keine FPU haben, aber Funktionen sind in der libc
disassemblierter code mit extended instructions:
Quellcode: | 0044 abf3 dec r15,#4 0046 0ffcc401 ext0f #%0ffcc401 004a 8e04c640 ext8e #%8e04c640 004e 14023f800000 ldl rr2,#%3f800000 0054 0b071388 cp r7,#%1388 0058 e705 jr c,%0064 005a a52e set r2,#14 005c 8f088201 ext8f #%8f088201 0060 a9f3 inc r15,#4 0062 9e08 ret
|
Man bastelt sich ein executable was diese pow10() funktion verwendet und benutzt dann adb zur disassemblierung:
Quellcode: | #61 adb a.out ADB: P8000 1.6 ? 0x0044/i %0044: dec sp,#4 ? 0x0046/i %0046: fldctl @sp,fflags ? 0x004A/i %004a: fsetmode rn ? 0x004e/i %004e: ldl rr2,#%3f800000 ? 0x005c/i %005c: flds f0,r2 ?
|
Dann stueckelt man das obere disassemblierte mit diesen extended Aufrufen in eine PLZ/ASM Datei zusammen:
Quellcode: | #67 cat pow10.s pow10 module global _pow10 procedure entry dec r15,#4 fldctl @r15,fflags fsetmode rn ldl rr2,#%3f800000 cp r7,#%1388 jr c,L1 set r2,#14 flds f0,r2 inc r15,#4 ret L1: end _pow10 end pow10
|
Und dann wird compiliert - aber mit "-f" fuer floating point Support!
Quellcode: | #66 as -f -o pow10.o pow10.s #67 objdu pow10.o File pow10.o Image size: 32 Bss size: 0 Entry point: 0x0 Segment 0 Text size: 32 Data size: 0 Bss size: 0 Text......
0000: abf3 0ffc c401 8e04 c640 1402 3f80 0000 0010: 0b07 1388 e705 a52e 8f08 8201 a9f3 9e08 Data......
#69
|
Gleicher Objektcode wenn man mit dem Disassemblierten Listing oben vergleicht -- P8000 adventures: http://pofo.de/blog/?/categories/1-P8000 |