• Keine Ergebnisse gefunden

1.Welchen Sinn haben Makros und Unterprogramme? Vergleichen Sie diese beiden Strukturierungsmöglichkeiten (nennen sie Vor- und Nachteile).

N/A
N/A
Protected

Academic year: 2021

Aktie "1.Welchen Sinn haben Makros und Unterprogramme? Vergleichen Sie diese beiden Strukturierungsmöglichkeiten (nennen sie Vor- und Nachteile)."

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1. Welchen Sinn haben Makros und Unterprogramme? Vergleichen Sie diese beiden Strukturierungsmöglichkeiten (nennen sie Vor- und Nachteile).

Makros und Unterprogramme werden für Funktionen verwendet, die man sehr oft in seinen Programmen benötigt (z. B. einlesen eines Zeichens bzw. einer Zeichenkette über eine Befehlszeile). Makros bzw. Unterprogramme bestehen also aus dem Programmcode der die jeweilige, oft benötigte Funktion enthält. Verwendet man also Makros und Unterprogramme in den eigenen Programmen, so werden diese übersichtlicher, weil statt eines eventuell sehr aufwendigen Stückes Code lediglich der Aufruf des Makros bzw. Unterprogrammes steht.

Weiterhin können Makros und Unterprogramme sehr gut gewartet, also verändert, verbessert oder erweitert werden, und beim nächsten Assemblieren eines eigenen Programmes, das einen solchen Makro oder Unterprogramm verwendet, ist auch dieses Programm aktualisiert.

Zuletzt sind Makros und Unterprogramme auch arbeitserleichternd, da sich der

Programmierer lediglich einmal dem gewählten Problem stellen muss (z.B. Ausgabe auf dem Bildschirm), und die erarbeitete Lösung von dort an immer in Form eines Makros bzw.

Unterprogrammes weiterverwenden kann, ohne sich immer wieder neu mit dem Problem befassen zu müssen.

Vergleich von Makros bzw. Unterprogrammen:

- Speicherplatz:

MAKROS: Da der Code des Makros bei Aufruf immer wieder in den Code des aufrufenden Programmes kopiert wird, können sehr große Dateien

entstehen, die sehr viel Arbeitsspeicher und auch Festplattenspeicher benötigen.

(NACHTEIL)

UNTERPROGRAMME: Da der Code eines Unterprogrammes nur einmal im

Programmcode auftaucht, weil beim Aufruf immer zwischen Speicherort des Hauptprogrammes und Speicherort des Unterprogrammes hin- und hergesprungen wird, benötigen Programme die Unter-

programme verwenden auch weniger Arbeitsspeicher.

Auch der Festplattenspeicher wird hier nicht so belastet,

da die jeweiligen Programmdateien nicht so groß werden. Durch Realisierung von externen Unterprogrammen, kann diese Festplattenspeicher- ersparnis noch verbessert werden, da das Unterpro- gramm dann in einer eigenen Datei steht, und somit mehrere Programme leicht auf dieses Unterprogramm zugreifen können.

(VORTEIL) - Geschwindigkeit:

MAKROS: Da der Makrocode von Aufruf zu Aufruf immer wieder in den Code des aufrufenden Programmes kopiert wird, wird er fester Bestandteil des

Programmes. Dadurch wird eine schnelle Ablaufgeschwindigkeit erzielt.

(VORTEIL)

UNTERPROGRAMME: Hier muss beim Aufruf erst an die Stelle im

Arbeitsspeicher gesprungen werden, an dem das Unterprogramm steht. Dazu muss jedoch die Rücksprungadresse zum

Hauptprogramm gespeichert werden. Dies geschieht indem diese Adresse auf dem Stack abgelegt wird (Near-Sprung – selbes Codesegement: nächster Wert des Instruction Pointers

(IP) nach dem Aufruf des Unterpogrammes im Hauptprogramm wir auf dem Stack abgelegt / FAR – Sprung – anderes Codesegment:

zusätzlich zum IP – Wert wird auch noch die Adresse des Codesegmentes des Hauptprogrammes auf dem Stack abgelegt).

(2)

Diese Prozedur nimmt etwas Zeit in Anspruch, und verlangsamt den Programmablauf im Vergleich zu einem Programm das an gleicher Stelle Makros verwendet.

(NACHTEIL) - Parameterübergabe:

MAKROS: Es sind beliebig viele Parameter möglich.

Es gibt ein einfaches Verfahren zur Parameterübergabe:

Bei Aufruf des Makros müssen die Parameter in der richtigen

Reihenfolge angegeben werden (überzählige werden ignoriert, fehlende durch null ersetzt.

(VORTEILE)

Bei Rekursionsaufrufen können Probleme entstehen. Es ist hier eine zumindest Abbruchbedingung nötig und die Sicherung verwendeter Register auf dem Stack wird empfohlen.

(NACHTEIL)

UNTERPROGRAMME: Es gibt mehrere Möglichkeiten zur Parameterübergabe:

- über Register, - über den Stack,

- und über einen Common – Data – Bereich.

Alle 3 Verfahren können zusätzlich entweder durch einen „call by value“ (Übergabe eines aktuellen Wertes) oder durch „call by reference“ (Adressenübergabe) realisiert werden.

Rekursionsaufrufe sind möglich.

Beliebig viele Parameter sind möglich.

(VORTEILE)

Nicht bei allen Verfahren sind beliebig viele Parameter möglich bzw. gibt es Probleme bei Rekursionsaufrufen.

(NACHTEILE)

2. Welche Möglichkeiten der Parameterübergabe an ein Unterprogramm kennen Sie. Was sind jeweils die speziellen Vor- bzw. Nachteile. Geben Sie jeweils ein typisches Beispiel an.

a) Parameterübergabe über Register

Die Parameter werden vor Aufruf des Unterprogrammes in Register geladen.

Vorteile:

- Das Verfahren ist einfach und schnell.

Nachteile:

- Es steht nur eine begrenzte Anzahl an Registern zur Verfügung.

- Die Register müssen zur Verfügung stehen.

- Bei Rekursionsaufrufen gibt es Probleme.

Beispiel:

Übergabe des Ergebnises einer Multiplikation oder Division an ein Unterprogramm, da hier das Ergebnis immer im AX – Register bzw. im Registerpaar DX:AX abgelegt wird.

b) Parameterübergabe über den Stack

Die Parameter werden vor dem Aufruf des Unterprogrammes auf dem Stack gesichert.

(3)

Vorteile:

- Es sind viele Parameter möglich.

- Rekursionsaufrufe sind möglich.

- Es können Speicherplätze für lokale Variablen reserviert werden.

Nachteile:

- Das Verfahren ist aufwendig, denn es muss immer der aktuelle Stackzustand bekannt sein um sicherzustellen, daß man die gewünschten Parameter wieder vom Stack holen kann. Außerdem dürfen die Rücksprung Adressen zum aufrufenden Programm micht überschrieben werden. bzw. muß sichergestellt werden, daß der Stackpointer vor dem Rücksprung wieder auf die Stelle des Stacks zeigt an dem die Adressen für den Rücksprung abgelegt wurden – sonst droht ein schwerer Fehler, der zum Absturz des Programmes führen kann.

Beispiel:

Wenn bei einer längeren Rechnung mehrere Zwischenergebnisse an des Unterprogramm zur erneuten Verarbeitung weitergegeben werden sollen.

z. B.: im aufrufenden Programm werden 3mal zwei Zahlen miteinander

multipliziert. Nach jeder Multiplikation wird das Ergebnis im AX – Register auf dem Stack abgelegt. Das Unterprogramm soll danach die 3 Werte vom Stack holen und miteinander addieren.

c) Parameterübergabe über ein gemeinsames Datensegment (Common Data – Bereich)

Es werden alle Größen aus einem Datensegment genutzt, daß aufrufendem- und Unterprogramm bekannt sein muß.

Vorteile:

- Es sind viele Parameter möglich - Das Verfahren ist einfach Nachteile:

- Es gibt Probleme bei rekursiven Aufrufen.

Beispiel:

Es werden verschiedene Strings im aufrufenden Programm eingelesen und in Variablen abgespeichert.

Diese Stringvariablen sollen im Unterprogramm ausgewertet werden.

3. Was versteht man unter „Call by Value“ bzw. „Call by Reference“

Call by Value

Ein aktueller Wert wird übergeben. Steht also z. B. die Zahl 5 in der Variable var1 so wird auch die Zahl 5 übergeben.

Call by Reference

Die Adresse der Speicherstelle eines Wertes wird übergeben. Steht also z. B. die Zahl 5 in der Variable var2, so wird nicht die Zahl5 selbst übergebene sondern der OFFSET-wert der Adresse von var2.

4. Erläutern Sie, welche Vorgänge in einem x86-Prozessor im Real-Modus ablaufen, wenn ein Sotware – Interrupt ausgelöst wird. Was sind die wesentlichen

Unterschide zu einem „Call – Aufruf“.

a) Indirekter Sprung zur Interrupt – Service – Routine (ISR)

b) Flagregister, Codesegment (CS)- und Instructionpointer (IP)-Adressen werden auf dem Stack gesichert.

(4)

c) InterruptEnableFlag (IF) und TrapFlag (TF) werden gelöscht.

d) Interrupt – Vektor – Adresse wird berechnet (4*n) (n: n-ter Interrupt mit n-tem OFFSET- und SEGMENTWERT.

e) Interrupt wird aus der Vektortabelle gelesen und in IP und CS geladen

Erfolgt ein InterruptReturn – Befehl (IRET) so werden 3 Werte vom Stack gelesen und in IP, CS und das Flagregister geschrieben.

Unterschiede zum einem „Call“ – Sprung Bei Call – Sprung:

- wird nicht zu einer festegelegten Routine gesprungen, - wird das Flagregister nicht automatisch gesichert,

- wird nur bei einem FAR – Sprung zusätzlich noch die Adresse des Codesegementes (CS) auf dem Stack abgelegt,

- müssen keine zusätzlichen Adressen berechnet werden,

- beim Rücksprung werden – beim NEAR – Sprung 1 Wert (IP) vom Stack gelesen und

in IP geschrieben, bei FAR – Sprung 2Werte (IP, CS) vom Stack geschrieben und in IP und CS geschrieben.

5. Was versteht man unter einem Stringbefehl? Erklären Sie die wesentlichen internen Schritte, die in der CPU bei der Bearbeitung ablaufen.

Ein Stringbefehl ist zur konfortablen Bearbeitung von Zeichenketten (Strings) da. Es gibt Stringbefehle zum Abspeichern, Rückrufen und Stringelementen, Transportieren und durchsuchen von Strings.

Die interne Abläufe in der CPU zeigt folgendes Schaubild:

6. Was versteht man unter einem „Modulkonzept“. Welche Definitionen sind in einzelnen Modulen notwendig und wie werden Sie realisiert?

Der Code einer Anwendung steht in verschiedenen Dateien. Diese Dateien sind miteinander verknüpft, und wirken miteinander wie ein Programm.

(5)

Die Dateien stellen dabei also die verschiedenen Module dar.

Beispiel zur Realisierung einer Anwendung im Modulkonzept:

MODUL1 (Datei 1 - Hauptprogramm)

├ EXTRN Fremdvariable1:BYTE

│ Es wird hier festgelegt, daß später eine Variable mit dem Namen Fremdvariable1 (aus │MODUL2) zur Verfügung stehen wird die im Code von MODUL1 verarbeitet werden │ kann. Diese Variable hat BYTE – Größe.

├ PUBLIC Weitergabevariable1

│ Es wird hier festgelegt, daß andere MODULE (MODUL2) die Variable Weitergabe- │ variable1 aufnehmen können und weiterverarbeiten können.

└ CODE des MODUL1

MODUL2 (Datei 2)

├ EXTRN Fremdvariable1:BYTE

│ Es wird hier festgelegt, daß später eine Variable mit dem Namen Fremdvariable1 (aus │MODUL1) zur Verfügung stehen wird die im Code von MODUL1 verarbeitet werden │ kann. Diese Variable hat BYTE – Größe.

├ PUBLIC Weitergabevariable1

│ Es wird hier festgelegt, daß andere MODULE (MODUL1) die Variable Weitergabe- │ variable1 aufnehmen können und weiterverarbeiten können.

└ CODE des MODUL2

Hat man die nötigen Module (Beispiel: MODUL1, MODUL2) bzw. Dateien für die geplante Anwendung nach dem obenstehenden Muster erstellt, so können die Dateien einzeln assembliert werden. Zu Anfang muß man jedoch entschieden haben, welche Datei das Hauptprogramm enthalten soll. Zuletzt wird noch so verfahren:

TLINK MODUL1 (Hauptprogramm) + MODUL2

Hier werden die einzelne MODULE bzw. Dateien zusammengefügt.

Danach entsteht eine Datei MODUL1.exe, die die fertige Anwendung darstellt.

7. Was versteht man unter „rekursiver Programmierung“?

Rekurive Programmierungliegt dann vor, wenn eine Schleife realisiert wurde, indem sich daß Programm an einem bestimmten Punkt immer wieder von neuem selbst aufruft. Dies geschieht meistens bis eine bestimmte Bedingung erfüllt bzw. nicht mehr erfüllt ist.

8. Welche Anweisungen muß ein Assembler können, damit auch ein „rekursiver Makroaufruf“ möglich ist?

Eine Anweisung die eine bestimmte Bedingung abfrägt:

IF Bedingung Befehlsfolge1 ELSEIF Bedingung2 Befehlsfolge2 ELSE Befehlsfolge3

ENDIF

Und falls nötig auch eine Anweisung mit der Makro verlassen werden kann: EXITM.

(6)

9. Was unterscheidet einen Hardware – Interrupt von einem Software – Interrupt?

Harware – Interrrupt (HINT), Software – Interrupt (SINT):

HINTs treten asynchron auf, d.h, daß das Hauptprogramm an einer beliebigen Stelle unterbrochen werden kann.

SINTs werden hingegen durcheinen im Programm stehenden Befehl (INT) ausgelöst, und haben dann eine ähnliche Wirkung wie ein Unterprogramm- Aufruf. Ein HINT wird z. B. ausgelöst, wenn ein Peripheriegerät nicht mehr funtkionsfähig ist (z. B.: Drucker hat kein Papier mehr), oder die Netzspannung zusammengebrochen ist. Dies geschieht dann automatisch, und ohne zutun des Anwenders. Ein SINT ist ein beabsichtigter Interrupt, der vom Programmierer gewollt festgelegt wurde. Der INT 21H ist ein sehr oft verwendeter Funktionsinterrupt, der z. B. mit seiner Funktion 09H, die Ausgabe von Zeichen bzw. Zeichenketten auf dem Bildschirm ermöglicht – ein typischer und oft benötigter Softwareinterrupt.

10. Beschreiben Sie die wesentlichen Aufgaben eines „Interrupt – Controllers“?

a) Verarbeitung der Interruptaufforderungen externer Geräte, der sogenannten Interrupt – Requests (IRQ’s / IQ’s)

b) Maskierung der anstehenden Interrupts durch das Interrupt Mask Register (IMR) um anliegende bzw.

nicht anliegende Interrupts festzustellen und in eine verarbeitbare Reihenfolge zu bringen.

c) Priorisierung der anstehenden Interrupts durch das Interrupt Pending Register (IPR) um festzustellen welcher Interrupt bevorzugt werden muß. Damit wird also die Abarbeitungsfolge der Interrupts festgelegt.

d) Verwaltung und Information über des / den Systemzustand(es). Dazu werden im Prioritätsschaltnetz (PSN) die Prioritäten der Interrupts ausgewertet. Danach wird für den auszuführenden Interrupt (der mit der höchsten Priorität) in der Vektorerzeugung die Vektor – Tabellen – Adresse ermittelt und über einen Datenbus wird daraufhin die CPU informiert welcher konkreter Interrupt angefordert wird.

e) Die eigentliche Anfrage bei der CPU startet das Interrupt Service Register, daß immer nur den

priorisierten Interrupt, also den Interrupt der von allen anliegenden Interrupts die höchste Wertigkeit in der Interrupt – Hierarchie hat, weitergibt. Dies geschieht über eine Leitung die den IRQ zur CPU weiterträgt. Die Rückmeldung von der CPU erfolgt über eine andere Leitung, die dann das Interrupt Acknowledgement – Signal (IACK) zum Interruptcontroller übermittelt.

11. Wie können Sie im Assembler mit externen Geräten kommunizieren? Wie wird sichergestellt, daß es zu keinen Konflikten mit RAM – Adressen kommt?

Über die Befehle IN bzw. OUT kann mit der Peripherie kommuniziert werden:

- IN: IN Ziel, Portadresse

mögliche Operanden: AL / AX / EAX, Konstante /DX

Durch diesen Befehl kann ein Byte oder Wort von einer Eingabe – Schnittstelle (Port) mittels der zugehörigen Portadresse in das AL bzw. AX Register eingelesen werden. Diese Portadresse ist eine 1 – Byte – Konstante (damit sind 256 Portadressen (0-255) möglich), oder der Inhalt von DX, womit 64K verschiedene Ports adressierbar sind.

- OUT: OUT Portadresse, Quelle

mögliche Operanden: Konstante /DX, AL/ AX

Durch diesen Befehl kann ein Byte, Wort oder Doppelwort (ab 80386) vom AL, AX oder EAX zu einer Ausgabe – Schnittstelle mittels der zugehörigen Portadresse geschickt werden. Diese Portadresse ist eine 1 – Byte – Konstante (damit sind 256 Portadressen (0-255) möglich), oder der Inhalt von DX, womit 64K verschiedene Ports adressierbar sind.

Ein Adressbereich für Portadressen solcher Ein-/ bzw. Ausgabeschnittstellen ist natürlich bereits festgelegt, um den Konflikt mit RAM – Adressen zu vermeiden.

12. Der x86 – Prozessor ist eine sogenannte „Zwei – Adress – Maschine“. Bei den Befehlen zur Multiplikation und Division ist aber nur eine Adresse anzugeben.

Erklären Sie, wie bei diesen Befehlen die Operanden angegeben werden können.

(7)

Die Befehle MUL und DIV zur Multiplikation und Division benötigen immer nur einen Quelloperanden als zusätzliche Angabe:

MUL Quelloperand DIV Quelloperand

Im Quelloperanden muß hierbei immer der Multiplikator bzw. Divisor hinterlegt werden:

- Bytedivision/-multiplikation: 8 Bit – Register/Byte – Speicherstelle - Wortdivision/-multiplikation: 16 Bit – Register/Word – Speicherstelle Zieloperanden: (Multiplikand bzw. Dividend)

MUL: Byte: AL DIV: Byte: AX

MUL: Word: AX DIV: Word: DX:AX

Auf diese Zieloperanden bezieht sich MUL bzw. DIV automatisch.

Die entsprechende Multiplikation bzw. Division sieht dann folgendermaßen aus:

Bytewerte, z. B.:

MOV AL, 5 ; Multiplikand /Dividend MOV BH, 5 ; Multiplikator / Divisor

MUL BH ; AL * BH  5*5 - das Ergebnis wird im AX – Register abgelegt, AX:=25 DIV BH ; AL / BH  5/5 - das Ergebnis wird im AX – Register abgelegt,

AL = Quotient = 1, AH = Rest = 0 Wordwerte, z. B.:

MOV AX, 50 ; Multiplikand /Dividend MOV BX, 50 ; Multiplikator / Divisor

MUL BX ; AL * BH  50*50 - das Ergebnis wird im AX – Register abgelegt, DX:AX :=2500

DIV BX ; DX:AX / BH  50/50 - das Ergebnis wird im Registerpaar DX:AX abgelegt, AX = Quotient = 1, DX = Rest = 0

Auch auf die angegebenen Register in denen das Ergbenis steht, bezieht sich MUL bzw. DIV automatisch.

Hier sind also bestimmte Register für die DIV- und MUL-Operationen vorgesehen.

13. Erklären Sie, wie z. B. in einem Unterprogramm “lokale Parameter” definiert werden und wie auf diese lokalen Größen zugegriffen werden kann.

Lokale Parameter können durch die Anweisung LOCALS eingerichtet werden, die Benennung selbst erfolgt immer durch @@variablennamen. Für diese Variablen ist es oft sinnvoll Platz auf dem Stack zu reservieren.

Dies kann durch eine sogeannte “Equate – Lise” erreicht werden, z. B:

;---Equate – Liste ---

@@VARIABLE_1 EQU [BP]+4

@@VARIABLE_1 EQU [BP]+6

Hier wurden zwei lokale Parameter entsprechenden Stackadressen zugeordnet. Nun kann mit Hilfe dieser Stackadressen auf die lokalen Variabeln zugegriffen werden.

Referenzen

ÄHNLICHE DOKUMENTE

Das Bayerische Staatsministerium für Ernährung, Landwirtschaft und Forsten, die Bayerischen Staatsforsten (BaySF) und der BUND Natur- schutz (BN) waren jeweils im Spätwinter 2013,

Es muss aber nicht mal Afrika oder Asien sein, auch bei Reisen nach Südeu- ropa kommen Durchfallerkran- kungen, aber auch grippale In- fekte häufiger vor.. Die Zahlen hatte ich

Welche Auswir- kungen dies auf Entwicklungsländer haben wird, hängt maßgeblich von den Reaktionen der anderen Han- delsmächte, vor allem der Europäischen Union (EU) und

China und Indien werden inzwischen und künftig gebraucht werden – sowohl für Problemlösungen in der globalen Wirt- schaft sowie für alle Nachhaltigkeitsfragen, die die

Auf www.diepta.de finden Sie alle wichtigen Infos zur Teilnahme, zum Gewinn und was ein Flatlay eigentlich ist. Jetzt ist auch wieder die Zeit der

Wäh- rend weiße Vaseline durch eine weitere Aufarbeitung fast voll- ständig entfärbt ist, wird diese Aufreinigung bei gelber Vase- line nicht durchgeführt.. Vase- line ist, auch

Da Produkte aus der Apotheke meist besonders hautverträglich sind und oft auch keine Duft- stoffe enthalten, eignen sich Syndets auch für trockene oder empfindliche Haut..

Solange sich die wirtschaft- liche Situation in Mexiko nicht verbessert und eine illegale Einwanderung dem Bedarf an ungelernten Arbeitskräften in Kalifornien treff-