Forum: PC-Programmierung Wieviele MIPS


von Mc Coy (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

Du weisst schon für was MIPS steht? Eine Anweisung hat allerhöchstens 
eine gewisse Anzahl Millionen Instruktionen, aber sicher nicht noch pro 
Sekunde.

von Reinhard R. (reirawb)


Lesenswert?

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

von Mc Coy (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Daniel (root) (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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)

von D. I. (Gast)


Lesenswert?

MIPS = Meaningless Indicator of Processor Speed

von Sebastian H. (Gast)


Lesenswert?

Ich kenn' noch folgende Übersetzung von unserem Prof. =)
MIPS = Meaningless Information Prepared for Salesmen

von (prx) A. K. (prx)


Lesenswert?

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.

von HildeK (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.