Frage zu MMX und Ladebefehlen (erledigt)



  • Dein Beispiel ist wirklich gut, weil ich jetzt einige Dinge wirklich verstehe!
    (Irgendwie findet man nur ne Menge Befehle aber kaum ein funktionieredes Beispiel)

    Eine Frage habe ich aber noch: Wie ich dies in ein MMX Register reinbekomme, wenn 0x41 nur einmal angegeben ist. (also nur in einem einzigen unsigned char).

    Wie mache ich aus:
    00000000 00000000 00000000 00000000 00000000 00000000 00000000 01000001

    Folgendes mit möglichst wenigen Befehlen:

    01000001 01000001 01000001 01000001 01000001 01000001 01000001 01000001



  • Du hast meinen Beitrag ja mal komplett ignoriert.

    0x01010101 * 0x41 = 0x41414141

    probier es doch mal aus.



  • imul schrieb:

    Du hast meinen Beitrag ja mal komplett ignoriert.

    0x01010101 * 0x41 = 0x41414141

    probier es doch mal aus.

    Ok das funktioniert! Aber wie macht man es, wenn das 0x41 nicht fest vorgegeben ist, sondern vom Benutzer eingegeben werden kann?



  • ???

    unsigned char in=0x41;
    unsigned int  out = 0x01010101 * in;
    

    in assembler wäre der imul befehlr interessant für dich.



  • Danke!

    Aber sehe ich das richtig, dass es keinen MMX Befehl gibt der das kann?



  • kann ich dir so nicht beantworten, da ich mit mmx eine weile nichts mehr gemacht habe. aber ich denke es wird einen multiplikationsbefehl geben im mmx befehlssatz. 2 imul befehle sind aber auch ausreichend flott zur not.



  • Danke habs jetzt so wie ich wollte!

    Ich habs so nach "imul"s Idee umgesetzt:

    unsigned char in=0x41;
    unsigned int out = 0x01010101 * in;



  • Ist so eine Multiplikation nicht langsamer als ein paar Bitshifts?

    unsigned char in = 0x41;
    unsigned int out = (in << 24) | (in << 16) | (in << 8) | in;
    


  • Finetuner schrieb:

    Ist so eine Multiplikation nicht langsamer als ein paar Bitshifts?

    unsigned char in = 0x41;
    unsigned int out = (in << 24) | (in << 16) | (in << 8) | in;
    

    Danke!
    Aber es geht mir nicht darum das super turbo schnelle Programm zu schreiben.
    Ich möchte einfach nur verstehen wie man MMX prinzipiell für die Verarbeitung von Multimedia Daten verwendet. (Und an einem Filter ausprobieren)
    Und das habe ich jetzt.



  • ich finde da sind die befehle gut erklaert.



  • Finetuner schrieb:

    Ist so eine Multiplikation nicht langsamer als ein paar Bitshifts?

    unsigned char in = 0x41;
    unsigned int out = (in << 24) | (in << 16) | (in << 8) | in;
    

    nein



  • Woran liegt denn das Problem die 8Bytes direkt in das Register zu laden? Ist doch klar, dass die MMX Befehle mit 8Bytes in einem Durchgang arbeiten, darauf sind sie doch ausgelegt.

    Und wie man schnell einen Wert in mehrere Bytes bekommt hat imul ja schon gezeigt.


Anmelden zum Antworten