Moin Kann man definitiv sagen wieviele MIPS ein Aufruf von zum Beispiel: a=25; benötigt? Oder vieleicht eine if Abfrage: if ((Pixel[y][x]==1) && (h==0)) LATD |= (1<<y); Ich programmiere in C18. Gibt es vielleciht auch die Möglichkeit, dass einem der Compiler die entsprechenden MIPS mitteilt? Gruß McCoy
Du weisst schon für was MIPS steht? Eine Anweisung hat allerhöchstens eine gewisse Anzahl Millionen Instruktionen, aber sicher nicht noch pro Sekunde.
MIPS - Million Instructions Per Second - Ist ein prozessortypischer Wert, der auch von der verwendeten Taktfrequenz abhängt. http://de.wikipedia.org/wiki/Instruktionen_pro_Sekunde Den kannst Du nicht auf eine Instruktion beziehen. Wenn Du aber wissen willst, wie viele Takte Deine Instruktion auf dem Prozessor benötigt, dann kannst Du Dir z.B. den übersetzten Assemblercode ansehen und die Takte für die einzelnen Befehle zusammenaddieren. Wird u.U. bei Schleifen schwierig. Reinhard
ich hab mir grad den Assembler Code angeschaut. Demzufolge benötigt die if Abfrage 59 Takte, sehe ich das richtig? Ich hab inAssembler wirklich 0 Ahnung, deshalb die Frage: wozu sind die ganzen NOP da? Und wieweit könnte man den Code evtl. noch schrumpfen? 112: if ((Pixel[y][x]==1) && (h==0)) LATD |= (1<<y); 0710 0E04 MOVLW 0x4 0712 CFDB MOVFF 0xfdb, 0x14 0714 F014 NOP 0716 0E05 MOVLW 0x5 0718 CFDB MOVFF 0xfdb, 0x15 071A F015 NOP 071C 0E16 MOVLW 0x16 071E 0215 MULWF 0x15, ACCESS 0720 CFF3 MOVFF 0xff3, 0x15 0722 F015 NOP 0724 0214 MULWF 0x14, ACCESS 0726 CFF3 MOVFF 0xff3, 0x14 0728 F014 NOP 072A 50F4 MOVF 0xff4, W, ACCESS 072C 2615 ADDWF 0x15, F, ACCESS 072E 0E00 MOVLW 0 0730 2614 ADDWF 0x14, F, ACCESS 0732 0E01 MOVLW 0x1 0734 2215 ADDWFC 0x15, F, ACCESS 0736 0E02 MOVLW 0x2 0738 6E08 MOVWF 0x8, ACCESS 073A 6A09 CLRF 0x9, ACCESS 073C CFDB MOVFF 0xfdb, 0xd 073E F00D NOP 0740 0E03 MOVLW 0x3 0742 CFDB MOVFF 0xfdb, 0xe 0744 F00E NOP 0746 EC17 CALL 0xa2e, 0 0748 F005 NOP 074A 5014 MOVF 0x14, W, ACCESS 074C 2406 ADDWF 0x6, W, ACCESS 074E 6EE9 MOVWF 0xfe9, ACCESS 0750 5015 MOVF 0x15, W, ACCESS 0752 2007 ADDWFC 0x7, W, ACCESS 0754 6EEA MOVWF 0xfea, ACCESS 0756 0E01 MOVLW 0x1 0758 18EE XORWF 0xfee, W, ACCESS 075A E101 BNZ 0x75e 075C 50ED MOVF 0xfed, W, ACCESS 075E E113 BNZ 0x786 0760 50D9 MOVF 0xfd9, W, ACCESS 0762 0F0A ADDLW 0xa 0764 6EE9 MOVWF 0xfe9, ACCESS 0766 CFDA MOVFF 0xfda, 0xfea 0768 FFEA NOP 076A 50EE MOVF 0xfee, W, ACCESS 076C 10ED IORWF 0xfed, W, ACCESS 076E E10B BNZ 0x786 0770 0E01 MOVLW 0x1 0772 6EF3 MOVWF 0xff3, ACCESS 0774 0E04 MOVLW 0x4 0776 50DB MOVF 0xfdb, W, ACCESS 0778 E004 BZ 0x782 077A 90D8 BCF 0xfd8, 0, ACCESS 077C 36F3 RLCF 0xff3, F, ACCESS 077E 06E8 DECF 0xfe8, F, ACCESS 0780 E1FC BNZ 0x77a 0782 50F3 MOVF 0xff3, W, ACCESS 0784 128C IORWF 0xf8c, F, ACCESS
Mc Coy schrieb: > ich hab mir grad den Assembler Code angeschaut. Demzufolge benötigt die > if Abfrage 59 Takte, sehe ich das richtig? Bei 8bit PICs sind Befehle nicht Takte. Ich glaube es sind 4 Takte pro Befehl.
NOP = no operation sprich es tut nichts, Preisfrage welchen Sinn hat es denn dann? > Data Hazards verhindern ansonsten: Opcode Befehl != Takt jeder Opcode braucht unterschiedlich viele Takte im Allgemeinen im Speziellen gibt es oft Ausnahmen (RISC, zb AVR, PicoBlaze) um dasganze auf Zeit zu beziehen (MegaInstr/Second) muss natürlich die Frequenz bekannt sein
sicher das das asm-listing wirklich bloss die If abfrage ist? denn ein 0746 EC17 CALL 0xa2e, 0 hätte ich dort nicht erwartet. (ich kenn aber bloss Atmel und x86 Assembler)
Ich kenn' noch folgende Übersetzung von unserem Prof. =) MIPS = Meaningless Information Prepared for Salesmen
Wenn's noch jemanden interessiert: Diese NOPs sind eine optische Täuschung, denn die PIC18 haben 2-Wort-Befehle (z.B. für mem to mem move), und der Disassembler stellt das zweite Wort als NOP dar. Wahrscheinlich sind das auch wirklich NOPs, wenn man frech genug ist, da reinzuspringen.
>Demzufolge benötigt die >if Abfrage 59 Takte, sehe ich das richtig? Nein. Das siehst du falsch. Über die vorhandenen Befehle: 0746 EC17 CALL 0xa2e, 0 075A E101 BNZ 0x75e 0778 E004 BZ 0x782 0780 E1FC BNZ 0x77a werden weitere Schritte eingefügt, die BZ und BNZ sind abhängig von gewissen Ergebnissen aus Registerwerten, die von den Eingangsbedingungen abhängen.
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.