Diskussion:Assembler-Programmierung für x86-Prozessoren/ Unterprogramme und Interrupts

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

Nächste Diskussion[Bearbeiten]

[quote]extern print erklärt dem Assembler, dass er die Programm-Marke print in einer anderen Quelldatei findet, obwohl sie in dieser Quelldatei eingeführt (definiert) wird.[/quote]

Als C/C++ Programmierer lernt man, dass die Definition einer Entitaet jene beschreibt, also nicht nur bekannt macht(Deklaration), sondern "mit Leben fuellt". Da diese Definition von "Definition" aber im Widerspruch mit der Verwendung von "(definiert)" im zitierten Satz steht, haben entweder beide Benutzungen des Begriffs "Definition" im Assembler- und C/C++ - Jargon unterschiedliche Bedeutung(was ich nicht glaube), oder aber dieser Satz ist fehlerhaft, denn die Programm-Marke print wird in mainprog nur verwendet, aber beschrieben(definiert) wird sie in sub_prog.

Eine Kleinigkeit: "Zum Aufrufen eines Unterprogrammes dient der Befehl call. Dieser schiebt seine Aufrufadresse auf den Stack und ruft das Unterprogramm anhand des Labels auf." Ich meine gelesen zu haben, dass der call-Befehl die Adresse des NÄCHSTEN Befehls auf den Stack legt, und nicht die eigene Adresse im Codesegment. -- 84.141.240.47 01:39, 10. Sep 2006 (CEST)

Stack, stack oder stack?[Bearbeiten]

Welches der beiden "stack" in "segment stack stack" im ersten Beispiel ist der Name des Segments? Vielleicht sollte das Segment besser "Stapel" genannt werden, dann würde das Beispiel entweder so: "segment Stapel stack", oder so: "segment stack Stapel" aussehen. -- 84.141.240.47 23:18, 9. Sep 2006 (CEST)

wo bleiben die interrupts[Bearbeiten]

Assembler (80x86 Prozessor)-Programmierung: Unterprogramme und Interrupts lässt darauf schließen, dass Interrupts erklärt werden Ich habe die erklärung aber nicht gefunden.

In der Tat. Allerdings gibt es m.E. zu Interrupts so viel zu sagen, dass da ein eigenes Kapitel sinnvoll wäre (Unterscheidung Hardware-Interrupt/Software-Interrupt/Prozessor-Exception – u.a. gelten da wesentlich unterschiedliche Regeln, was der Interrupt-Code machen darf bzw. muss –, Reentranz von Interrupts, das Interrupt-Flag, ...) --85.176.245.243 19:34, 26. Jun. 2007 (CEST)[Beantworten]

Fehler im Code[Bearbeiten]

Hier ist doch ein Fehler oder?

segment stack stack 
       resb 64h 

segment code

  ..start:
  mov ax, 0111h
  mov bx, 0222h
  mov cx, 0333h
  push ax
  push bx
  push cx
  pop bx
  pop ax
  pop cx
  mov ah, 4Ch

Da der Stack ein LIFO-Speicher ist, muss man die gesicherten Register doch in der umgekehrten Reihenfolge, also

pop cx 
pop bx
pop ax

zurückholen. -- 87.148.144.165 20:34, 27. Mai 2011 (CEST) (Signatur nachgetragen, Thema verschoben von Jürgen)[Beantworten]

Bitte beachten:
  • Beiträge auf Diskussionsseiten sollten mit 4 Tilden ~~~~ unterschrieben werden, damit der Zusammenhang von Frage und Antwort deutlich bleibt.
  • Neue Beiträge gehören ans Ende (wir lesen ja von oben nach unten); dazu gibt es oben die Funktion    Abschnitt hinzufügen   .
  • Es gibt unten die Vorschau-Taste. Damit kannst du gleich erkennen, wie deine Eingabe aussieht.
Danke für die Aufmerksamkeit! -- Jürgen 21:28, 27. Mai 2011 (CEST)[Beantworten]
Moin, Kurzantwort Jain, prinzipiell pop't man in der umgekehrten Reihenfolge zum pushen. Aber dieses Programm macht nichts weiter als den Inhalt der Register zu tauschen und ist konsistent mit den weiteren Erklärungen, Der Autor will zeigen, wie sich nach der Pop-Operaton der Wert verändert, der Wert würde sich jedoch nicht verändern, wenn er die in der "richtigen" Reihenfolge poppen würde, da er ax, bx und cx in der zwischenzeit nicht nicht modifziert, insofern würde man nicht verstehen, was die pop-Operation genau tut. -- ThePacker 22:19, 27. Mai 2011 (CEST)[Beantworten]