Assembler - Befehlsliste /-referenz



  • Hallo,

    ich suche (private Weiterbildungsmaßnahme) für 64bit Programmierung auf Intel und AMD Plattformen eine gute Befehlsliste + SSE + 3DNow und den ganzen Schrott 😉 . Zudem würden mich die benötigte Takte für die Befehle interessieren. Gibt es da was vernünftiges? Web / Buch.
    ~Unter gut verstehe ich eine ordentliche Gliederung. Kein Text, wo in jedem Absatz ein Befehl versteckt ist :-)~

    Dann hätte ich noch eine Frage, die die Benutzung von Befehlen angeht. Ich war bis jetzt immer der Meinung, dass man keine 16bit und 32bit Befehle mischen kann. Heute hat mich ein Freund, der gerade Assembler lernt, ein Buch gezeigt, in diesem das explizit erwähnt wird. Hier sagt der Author, dass es möglich sei. Buch "Assembler: Grundlagen der Programmierung".

    Was steckt hinter der Behauptung? Das wäre interessant, wenn z.B. die 16bit Befehle weniger Takte benötigen und der Code-Teil sehr häufig ausgeführt wird. Bei Ausführungszeiten > 2 Tage.

    Gruß,
    Thomas



  • Was steckt hinter der Behauptung?

    Du kannst 8 Bit, 16 Bit und 32 Bit Befehle (und wahrscheinlich 64 Bit) mischen. Du kannst auf eax, ax, ah und al arbeiten.

    wenn z.B. die 16bit Befehle weniger

    Tja wenn, ... andere Konzepte gibt es auch noch, wie z.B. Intels UV-Pipeline.

    Hier einige Links (mittels google gefunden):
    http://www.tommesani.com/Docs.html
    http://docs.google.com/Doc?id=dfpj2d8d_70cswxt6c3



  • Hallo,

    [...] für 64bit Programmierung auf Intel und AMD Plattformen eine gute Befehlsliste + SSE + 3DNow und den ganzen Schrott 😉 . Zudem würden mich die benötigte Takte für die Befehle interessieren. Gibt es da was vernünftiges? Web / Buch.

    Schau mal direkt auf den Intel/AMD Seiten nach, die haben recht gute Handbücher. Als Buch könnte ich dir "Assembler GE-PACKT" von J. Rohde empfehlen. Weiß jetzt aber nicht, ob auch 64bit Programmierung drin ist.







  • Chromp schrieb:

    Schau mal direkt auf den Intel/AMD Seiten nach, die haben recht gute Handbücher. Als Buch könnte ich dir "Assembler GE-PACKT" von J. Rohde empfehlen. Weiß jetzt aber nicht, ob auch 64bit Programmierung drin ist.

    Danke an alle, wie peinlich. Natürlich geben die CPU Hersteller sehr gute Doku's raus. Sie möchten ihre Produkte auch verkaufen.



  • knivil schrieb:

    wenn z.B. die 16bit Befehle weniger

    Tja wenn, ... andere Konzepte gibt es auch noch, wie z.B. Intels UV-Pipeline.

    Könntest du das mal anschneiden? Welche Vorteil erhält man aus der Benutzung von z.b. 16bit Befehlen?



  • Wenn ich nur auf 16 Bit Daten arbeite, oder 8 Bit Daten, dann kann ich sowas wie xor ah,al haben. Aber das haengt ganz entscheidend vom Anwendungsfall ab.



  • Aber das haengt ganz entscheidend vom Anwendungsfall ab.

    Interessant. Mich interessiert, ab wann ich darauf abzielen sollte bzw. was ich damit gewinne und verliere. Sprich, Pro und Contras.

    Sagen wir mal, ich habe Daten in einer Datei als 8bit vorliegen.

    1. Daraus berechne Xyz mit einem Algorithmus, dem es egal ist, ob die Variablen 8bit oder 32bit sind.

    2. Daraus bere..., dem es nicht egal ist, ob die Variablen 8bit oder 32bit sind. Dieser nutzt einen Überlauf der 8bit Variable aus. Also müsste man an einigen stellen die Bits mit einer Mask abschneiden.

    3. Vielleicht könntest du einen geeigneten Anwendungsfall bereitstellen.

    4. Gibt es eine Möglichkeit, dass eine 64bit CPU acht 8bit Befehle gleichzeitig arbeitet z.B. Addition. Also ganz nach der Chinesen-Regel.



  • Siassei schrieb:

    Interessant. Mich interessiert, ab wann ich darauf abzielen sollte bzw. was ich damit gewinne und verliere. Sprich, Pro und Contras.

    Grundsätzlich gilt: partielle Registerzugriffe vermeiden (Stichwort register renaming)

    Siassei schrieb:

    Daraus berechne Xyz mit einem Algorithmus, dem es egal ist, ob die Variablen 8bit oder 32bit sind.

    die Größe der Operanten musst du vorher festlegen

    Siassei schrieb:

    1. Gibt es eine Möglichkeit, dass eine 64bit CPU acht 8bit Befehle gleichzeitig arbeitet z.B. Addition.

    Die meisten Befehle lassen sich mit 8,16,32 und 64Bit Operanten benutzen.
    Bsp:

    add rax,rdx ; 64 bit
    add eax,edx ; 32Bit
    add ax,dx   ; 16 Bit
    add al,dl   ; 8 Bit
    ; oder
    add ah,dh   ; 8 Bit
    

    Siassei schrieb:

    Also ganz nach der Chinesen-Regel.

    😕 😕



  • 4.) Das hat nichts mit 8, 16, 32, ... Bit zu tun, sondern einzig und allein mit der Datenabhaengigkeit. Also add eax ebx kann gleichzeitig (muss aber nicht) neben add ecx edx ausgefuehrt werden. Der Vorteil von 64 Bit CPUs ist unter anderem auch, dass sie mehr Register zur Verfuegung haben.



  • masm schrieb:

    Siassei schrieb:

    Also ganz nach der Chinesen-Regel.

    😕 😕

    1 Bagger benötigt 10 Tage für den Aushub eines Hauses.
    1000 Bagger benötigen 0,01 Tage für den Aushub eines Hauses. 😃



  • knivil schrieb:

    4.) Das hat nichts mit 8, 16, 32, ... Bit zu tun, sondern einzig und allein mit der Datenabhaengigkeit. Also add eax ebx kann gleichzeitig (muss aber nicht) neben add ecx edx ausgefuehrt werden. Der Vorteil von 64 Bit CPUs ist unter anderem auch, dass sie mehr Register zur Verfuegung haben.

    Sind die Daten im Register ecx und edx unabhängig von eax und ebx --> parallele Ausführung garantiert? Oder eher kann parallel ausgeführt werden.



  • Siassei schrieb:

    Sind die Daten im Register ecx und edx unabhängig von eax und ebx --> parallele Ausführung garantiert? Oder eher kann parallel ausgeführt werden.

    Die CPU sorgt dafür das alle vorhandenen Recheneinheiten so gut wie möglich ausgenutzt werden. Wenn es gerade passt wird es natürlich parallel ausgeführt. Genau wird man das aber nicht bestimmen können, da die Vorgehensweise von aktuellen Prozessoren recht komplex ist. Es werden mehrere Befehle im Voraus gelesen, in kleinere microops zerlegt, und umsortiert um die Auslastung der einzelnen Einheiten zu erhöhen.

    Daher gibt es auch recht wenig feste Optimierungsregeln, sondern eher Richtlinien. Und im Intel Optimierungs Manual findet man zum Thema partielle Register sowas:

    Assembly/Compiler Coding Rule 65. (H impact, M generality)
    Use the 32-bit versions of instructions in 64-bit mode to reduce code size unless the 64-bit version is necessary to access 64-bit data or additional registers.

    Although partial register access does not cause additional delay, the in-order hardware tracks dependency on the full register. Thus 8-bit registers like AL and AH are not treated as independent registers. Additionally some instructions like LEA, vanilla loads, and pop are slower when the input is smaller than 4 bytes.

    Assembly/Compiler Coding Rule 8. (M impact, MH generality)
    For Intel Atom processors, LEA, simple loads and POP are slower if the input is smaller than 4
    bytes.


Anmelden zum Antworten