Diskussion:Assembler-Programmierung für x86-Prozessoren/ Rechnen mit dem Assembler

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Carry Flag[Bearbeiten]

Carry Flag, Carry-Flag, Carryflag, Statusbit für Übertrag, Übertragstatusbit - man soll vieleicht nur eine Schreibweise benutzen. Welche? --85.73.26.143 13:43, 3. Sep 2005 (UTC)

Werde in Zukunft Carry Flag benutzen und mit der Zeit alle übrigen der Schreibweise anpassen. -- Daniel B 20:46, 22. Okt 2005 (UTC)

Der Abschnitt ist bemerkenswert. -- Klaus Eifert 16:30, 14. Okt 2005 (UTC)

In wie fern? -- Daniel B 12:29, 15. Okt 2005 (UTC)
Sowohl in historischer Hinsicht (i80186) als auch in der Ausführlichkeit. Bisher glaubte ich, über Assembler fast alles zu wissen ... -- Klaus Eifert 09:28, 2. Nov 2005 (UTC)

Links präzisiert[Bearbeiten]

Habe mal die Hoch-Links verbessert - nur in diesem Artikel. Ich finde es praktischer, wenn man im Inhaltsverzeichnis landet statt im Vorwort. -- Klaus Eifert 09:28, 2. Nov 2005 (UTC)

Abbildung[Bearbeiten]

[quote]Hier wird das Last Significant Bit zunächst in das Carry Flag geschoben und dessen Inhalt in das Most Significant Bit (siehe Abbildung 2).[/quote] Hier wird doch sicherlich Abbildung 3 gemeint sein, oder?

Verwirrung bei der Subtraktion[Bearbeiten]

"Beispiel: 70 - 50 = 20 Diese Subtraktion kann durch die folgenden zwei Anweisungen in Assembler dargestellt werden: mov ax,70h sub ax,50h"

Es ist ein wenig verwirrend, dass einmal mit Dezimalzahlen und einmal mit Hexadezimalzahlen gearbeitet wird. "70 - 50 = 20" und "70h - 50h = 20h" sehen zwar gleich aus, aber es ist eben nicht das gleiche. Hier könnte schnell jemand verwirrt sein, wenn er das Programm ausprobiert und 20h rausbekommt, obwohl im Beispiel doch 20 (im Dezimalsystem) rauskam. --84.141.222.236 21:47, 3. Sep 2006 (CEST)

Schiebe- und Rotationsbefehle[Bearbeiten]

Wofür benötigt man diese Befehle denn überhaupt? Ich habe offensichtlich zu wenig Phantasie. ;) Ein kleines Anwendungsbeispiel wäre nicht schlecht. --84.141.253.60 22:28, 3. Sep 2006 (CEST)

Schiebebefehle werden zum Beispiel verwendet, um Integer Werte schnell durch Potenzen von 2zu dividieren (Rechtsschift), oder zu multiplizieren. Bspw. kann man die Multiplikation bspw. mit 320 durch eine Addition und zwei schiebeoperationen vornehmen.
  • Beispiel Multiplikation: 320*(x) = 256*x + 64*x = x<<8 + x<<5
  • Beispiel Ganzzahldivision: x div 16 = x>>4
Rotations befehle werden für verschiedene Zwecke benutzt. u.A. Algebraische Codes, CRC -- ThePacker 23:42, 3. Sep 2006 (CEST)

Logische Verknüpfungen schlecht erklärt[Bearbeiten]

Als ich zum ersten Mal den Abschnitt über logische Verknüpfungen las, war mir erst überhaupt nicht klar, was diese überhaupt bewirken. Ich kannte zwar logische Verknüpfungen aus C++, aber diese unterscheiden sich doch ein wenig von denen in Assembler. Ich habe mir sie danach auf einer anderen Seite angeschaut und verstanden, aber es wäre gut, wenn man es auch hier gleich verstehen würde. Um die grundlegende Funktion von logischen Verknüpfungen zu verdeutlichen, habe ich ein kleines Beispiel eingefügt.

Nun meine Frage: Ist das in Ordnung so? --84.175.123.84 17:28, 7. Mär. 2007 (CET)[Beantworten]

Beispiele sind immer gut, und hier besonders. Bist du derjenige, der schon seit einiger Zeit Verbesserungen vornimmt? Es wäre nett, wenn du dich anmelden würdest! Gruß -- Klaus 21:59, 7. Mär. 2007 (CET)[Beantworten]
Nein, dies ist meine erste Veränderung an diesem Wikibook. Ich bearbeite auch nicht so viel, als dass es nötig wäre sich anzumelden. Übrigens finde ich es sehr toll an Wikipedia, dass man fast nie erwarten muss, "Ärger" für eine Bearbeitung zu bekommen :-) --84.175.116.83 20:17, 11. Mär. 2007 (CET)[Beantworten]
:-) -- Klaus 00:07, 12. Mär. 2007 (CET)[Beantworten]

Schiebeoperationen[Bearbeiten]

Meiner Meinung nach ist das mit SHL/SAL bzw.SAR nich besonders gut erklärt. Erst wird erklärt, dass bei den arithmetischen Befehlen allgemein immer das Most Significant Bit nachgeschoben wird und plötzlich heißt es weiter unten, dass es doch zumindest bei SAL und SHL keinen Unterschied gibt und dabei immer eine 0 nachgeschoben wird und die Befehle sogar den gleichen Opcode erzeugen.

Meiner Meinung nach ist diese Erklärung nicht ganz geglückt. Man sollte gleich am Anfang sagen, dass der MSB nur bei der SAR Funktion eine Rolle spielt.

Es wäre halt denkbar gewesen, dass beim SAL Befehl eben doch eine 1 geschoben werden würde. Bzw. hatte ich mir das so vorgestellt und die Grafik+Erklärung fand ich dann schon etwas verwirrend.


Ausserdem: Ich glaube ganz unten im Kapitel steht mehrmals "Last Significant Bit", da hat sich wohl der Fehlerteufel eingeschlichen, der Autor meinte sicherlich "Least Significant Bit".

Gruß

ADD und MOV mit Adressen[Bearbeiten]

"Fehlen die eckigen Klammern, interpretiert der Assembler das Label summand1 und ergebnis als Adresse. Im Falle des add Befehls würde das BX Register folglich mit der Adresse von summand1 addiert. Beim mov Befehl hingegen würde dies der Assembler mit einer Fehlermeldung quittieren, da es nicht möglich ist, den Inhalt des BX Registers in eine Adresse zu kopieren und es folglich keinen Opcode gibt."

In dem Beispiel steht:

  add bx, [summand1]

Aber wenn ich das durch einen mov Befehl ersetze und die Klammern weg lasse habe ich "mov bx, summand1". Und das ist meines Wissens erlaubt. --143.93.66.11 10:54, 9. Mär. 2009 (CET)[Beantworten]

Stimmt, mov bx,summand1 ist erlaubt. Das Ergebnis ist eine Adresse, und zwar eine Adresse 500h hinter der Adresse von Summand1. Aber was hat das mit dem Beispiel zu tun? -- Klaus 23:09, 9. Mär. 2009 (CET)[Beantworten]