Hallo, gibt es bei mir einen Denkfehler, macht der Compiler Fehler, oder macht der Disassembler Fehler? Code soll sein für den ATmega8 Also von R0 bis R15 sind die PUSH, POP, DEC zwar richtig, aber bei LDI sind die Register immer um 16 höher laut Disassembler. Ich habe ziemlich lange in meinem eigentlichen Code gesucht und dann so eine merkwürdige Stelle gefunden, weil das Programm nicht läuft. Beim Ändern auf andere Register unter R16 war das dann genau so. Darum habe ich mal diesen Beispielcode erstellt (der so Unsinn ist, nur zum Compiler / Disassembler Check). Viele Grüße Herbert Source: procedure CHECK_Inline_ASM; begin { CHECK_Inline_ASM } asm push R0 LDI R0,0 DEC R0 pop R0 push R1 LDI R1,$01 DEC R1 pop R1 ... ... push R16 LDI R16,16 DEC R16 pop R16 end; end; { CHECK_Inline_ASM } Ergebnis des Disassemblers (ReAVR Version 3.2.0 beta vom 23.04.2005) push r0 ldi r16,k00 dec r0 pop r0 push r1 ldi r17,k01 dec r1 pop r1 ... ab die Register von R16 bis R31 sind dann ok: push r16 ldi r16,k10 dec r16 pop r16 Aus dem LST Output des Compilers nur mal für R0 und R1 0x01EE 0x920F PUSH R0 0x01F0 0xE000 LDI R0, 0 0x01F2 0x940A DEC R0 0x01F4 0x900F POP R0 0x01F6 0x921F PUSH R1 0x01F8 0xE011 LDI R1, 1 0x01FA 0x941A DEC R1 0x01FC 0x901F POP R1 Aus dem LST Output des Compilers nur mal für R16 und R17 0x0276 0x930F PUSH R16 0x0278 0xE100 LDI R16, 16 0x027A 0x950A DEC R16 0x027C 0x910F POP R16 0x027E 0x931F PUSH R17 0x0280 0xE111 LDI R17, 17 0x0282 0x951A DEC R17 0x0284 0x911F POP R17
Aeh ja. Die optimierungen sind natuerlich abgeschaltet ?
Hi 'LDI' gibt es bei den Registern r0..r15 nicht. MfG Spess
Hallo @spess53, Danke! Ich kannte die Einschränkung nicht. Schade, das der Compiler nicht meckert und der Disassembler auch nicht. Ich habe es aber nun auch im Datenblatt gefunden (Seite 91 DOC0856.pdf) falls jemand auch auf so ein Problem stößt. Viele Grüße Herbert LDI – Load Immediate Description: Loads an 8 bit constant directly to register 16 to 31. Operation: (i) Rd ← K Syntax: Operands: Program Counter: (i) LDI Rd,K 16 ≤ d ≤ 31, 0 ≤ K ≤ 255 PC ← PC + 1
Compiler: M_i_k_r_o_P_a_s_c_a_l_P_r_o_V_2_._1_0 Disassembler: ReAVR Version 3.2.0 beta vom 23.04.2005
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.