• Keine Ergebnisse gefunden

3.1 Der 8086-Prozessor

N/A
N/A
Protected

Academic year: 2021

Aktie "3.1 Der 8086-Prozessor "

Copied!
47
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Datenverarbeitungssysteme 3 Assembler (i8086)

Ziele

• Aufbau und Arbeitsweise von Prozessoren

• Befehlstypen

• Assemblerprogrammierung

• Segmentierung

• Adressierung

• Stack

• Interruptbearbeitung

(2)

Datenverarbeitungssysteme

3.1 Der 8086-Prozessor

3.1.1 Eckdaten

• 16-Bit-Register

• 20-Bit-Adressbus, Adressraum 1MB

• Byte-, Wortzugriff möglich (8/16-Bit)

• 14 Register zu je 16 Bit (mit Segmentregister und Flags)

• Spezialbefehle für Blockoperationen (”Stringbefehle“)

• Arithmetikbefehle für Zahlen mit und ohne Vorzeichen, auch Multiplikation und Division

• Herstellung in NMOS und CMOS (HMOS), Arbeitsfrequenzen 5,8 und 10 MHz

• Aufgebaut aus 28000 Transistoren

• Zwei Betriebsarten: Minimum- und Maximum-Modus

• Zusammensetzung von Adressen durch die Inhalte zweier Register, dadurch Segmentierung des Speichers

• Adress- und Datenleitungen sind gemultiplext

• Alle Steuerleitungen sind gemultiplext oder haben zumindest im Minimum- und Maxi- mumbetriebsart verschiedene Bedeutung

• Code von Intel-8085-Prozessoren kann mit Programmen in 8086-Code verwandelt werden.

• 6-Byte Prefetch-Queue zur Verbesserung der Rechenleistung

(3)

Datenverarbeitungssysteme

3.1.2 Blockschaltbild des 8086-Prozessors

(4)

Datenverarbeitungssysteme

3.1.3 Die Register des 8086-Prozessors Universalregister

AX AH AL Akkumulator (Hauptrechenregister)

BX BH BL Basisregister bei indirekter Adressierung

CX CH CL Zählregister

DX DH DL Datenregister

Zeiger- und Indexregister

DI Destination Index (Felder adressieren, Stringbefehle)

SI Source Index (Felder adressieren, Stringbefehle)

SP Stack Pointer (Stackverwaltung des Prozessors)

BP Base Pointer (für Adressierung im Stack)

(5)

Datenverarbeitungssysteme

Die Register des 8086-Prozessors

Segmentregister (zur Adressbildung)

CS Code Segment

DS Daten Segment

SS Stack Segment

ES Extra Segement

Register für Programmfluss und -status

IP Instruction Pointer

Flags Prozessorstatuswort

(6)

Datenverarbeitungssysteme

(7)

Datenverarbeitungssysteme

3.1.4 Adressbildung

Speicherzellen

Zellen-Nr. Adresse 8 0 Bit

0 00000h

1 00001h Byte 15 Segmentadresse 0

2 00002h 0 0 0 0 3 00003h

(8)

Datenverarbeitungssysteme

Adressbildung Beispiele:

Speicherzelle Segmentadresse Offsetadresse logische Adresse

0 0 0 0000h:0000h

20 0 20 0000h:0014h

20 1 4 0001h:0004h

65535 0 65535 0000h:FFFFh

65535 4095 15 0FFFh:000Fh

1048575 (FFFFFh) 65535 (FFFFh) 15 (000Fh) FFFFh:000Fh

Vorteile:

• Code und Daten leicht unterscheidbar (unterschiedliche Segmente)

• Segmente "leicht verschiebbar" (relocatable)

• Gute Speicherausnutzung Nachteil:

• keine eindeutige Adressbildung beim Debuggen

(9)

Datenverarbeitungssysteme

3.2 Darstellung und Konvertierung von Daten

Bit (binary digit)

ist die kleinste Darstellungseinheit für Daten im binären System bit (basic indissoluble information unit)

ist die kleinste Informationseinheit einer Nachricht Byte

ist die Zusammenfassung von 8 Bit Stellenwertsystem

ist ein System zur Darstellung von Zahlen durch Ziffern, bei denen der Wert einer Ziffer von der Stelle abhängt, an der sie geschrieben steht.

z.B. Stellenwertsystem zur Basis 10

1234 entspricht 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 Dualsystem

ist ein Stellenwertsystem zur Basis 2

z.B. 100101b entspricht 1*25 + 0*24 + 0*23 + 1*22 + 0*21 + 1*20 Hexadezimalsystem (Sedezimalsystem)

ist ein Stellenwertsystem zur Basis 16 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) z.B.: 3Ch bzw $3C entspricht 3 * 161 + 12 * 160

(10)

Datenverarbeitungssysteme

3.2.1 Darstellung von ganzen Zahlen 3.2.1.1 Vorzeichen und Betrag

Dabei wird ein Bit als Vorzeichen (most significant bit) interpretiert und die restlichen Bits stellen den Betrag als Dualzahl dar.

positive Zahl: msb = 0 negative Zahl: msb = 1

VZ Betrag

BitNr. n n-1 n-2 2 1 0

Beispiel: für 8 Bit bzw. ein Byte + 0 0000 0000b

+ 1 0000 0001b

. . + 127 0111 1111b + (2n – 1)

- 0 1000 0000b - 1 1000 0001b

. . - 127 1111 1111b - (2n – 1)

Der Betrag von positiven und negativen Zahlen ist gleich Zwei Darstellungen für die "0"

(11)

Datenverarbeitungssysteme

3.2.1.2 Zweierkomplementdarstellung

• Positive Zahlen werden als Dualzahlen dargestellt

• Negative Zahlen werden durch das Zweierkomplement (Ergänzung zu 2k mit k gleich Anzahl der Bits) dargestellt.

Beispiel: 4 Bits; Zweierkomplement ist Ergänzung zu 24;

d.h. für Zahl 7 ist 9 das Zweierkomplement ( 7 + 9 = 16) damit ist - 7: 1001b und + 7: 0111b

Beispiel: 8 Bit bzw. 1 Byte

+ 0 0000 0000b 0 + 1 0000 0001b

. . + 127 0111 1111b + (2n – 1)

- 128 1000 0000b - 2n - 127 1000 0001b - (2n –1)

. . - 1 1111 1111b - 1

• Nur eine Darstellung der 0

• einfache Unterscheidung von

positiven und negativen Zahlen (msb)

• Subtraktion auf Addition des Zweier- komplementes zurückzuführen

Einfache Bildung der 2er-Komplementes:

• Kopieren der Stellen von rechts bis ein- schließlich der ersten 1 und dann alle Bits invertieren.

• Alle Bits invertieren und dann 1 dazuzählen

(12)

Datenverarbeitungssysteme

3.2.2 Darstellung von Zeichen

Es gibt viele Möglichkeiten, zu bestimmten Folgen von Bits Zeichen zuzuordnen.

z.B.: BCD-Code zur Darstellung von Ziffern (4 Bit)

BCD-I-Code zur Darstellung von Zeichen (6 Bit – keine Groß-/Kleinschreibung) 3.2.2.1 Der EBCD-I-Code

8 Bit Code

oft in Großrechnern z.B. von IBM

(13)

Datenverarbeitungssysteme

3.2.2.2 Der ASCII-Code American Standard Code for Information Interchange

• 7 – Bit -Code

• Steuerzeichen in den ersten beiden Spalten

• Zwei Spalten mit Sonder- zeichen und Ziffern in natürlicher Reihenfolge

• Je zwei Spalten für Groß- und Kleinbuchstaben in alphabetischer Reihenfolge (Abstand: 100000b)

(14)

Datenverarbeitungssysteme

Der erweiterte ASCII-Code

8 – Bit Code zur

Darstellung von sprach- spezifischen Zeichen wie z.B. Ä, ß...

Verwendet unter DOS

heute wird oft auch

ein 16-Bit-Code verwendet:

Unicode

(15)

Datenverarbeitungssysteme

3.3 Das Format einer Assemblerzeile

[Label:] [Befehl [Operanden]] [;Kommentar]

[Name] Anweisung/Pseudobefehl [Operanden] [;Kommentar]

Beispiele:

marke1: add ah, par1 ;der Inhalt von par1 wird zum Inhalt von AH

;addiert und das Ergebnis wird in AH geschrieben

; AH := AH + par1

par1 DB 23h ;es wird ein Byte im Speicher reserviert -

; in dieses Byte steht nach dem Laden 23h Ziel

Register oder Speicherzelle (1. Operand)

Quelle

Register oder Speicherzelle oder Konstante

(2. Operand)

(16)

Datenverarbeitungssysteme

3.4 Die Struktur eines Assemblerprogrammes

Ein Assemblerprogramm enthält SEGMENT Anweisungen , Anweisungen und Befehle und die END Anweisung

3.4.1 Die Standard Segment Anweisung Segmentdefinition:

Name SEGMENT [Ausrichtung] [Kombination] ['Klasse']

. . . .

Name ENDS

Segmentzuordnung:

ASSUME SegReg : SegName

Ausrichtung:

legt die Anfangsadresse des Segmentes fest (byte, word, dword, para, page)

Kombination:

legt fest, wie Segmente mit gleichem Namen zusammengefasst werden können

(public, stack, common, at .... , private)

'Klasse':

kann die Anordnung der Segmente in ausführbaren Programm beeinflussen (Segmente mit gleichen Klassennamen werden in zusammenhängenden

Speicherbereich abgelegt)

(17)

Datenverarbeitungssysteme

Beispiel mit der Standard Segment Definition

Daten SEGMENT WORD PUPLIC ; Anfang eines Segmentes an "Wortadresse"

var1 DB (?) ;reserviert ein Byte

var2 DW 1234h ;ein Wort wird reserviert und mit 1234h beschrieben tab DB 5 DUP (3) ;5 Bytes werden mit 3 beschrieben

var3 DD 12345678h ;ein Doppelwort wird mit 12345678h beschrieben Daten ENDS ;Ende der Segmentdefinition

Kellersp SEGMENT STACK 'STACK' ;Anfang einer Segmentdefinition

DW 100h DUP (0) ;256 Worte werden mit 0 beschrieben Kellersp ENDS ;Ende der Segmentdefinition

ASSUME DS:Daten; CS:ProCode, SS:Kellersp ;Zuordnung der Segmente

ProCode SEGMENT PARA ;Anfang eines Segmentes an "Paragraphenadresse"

anf: mov ax,Daten ;Adresse "Daten" wird in AX kopiert mov ds,ax ;Adresse "Daten" kommt in DS .

.

mov ah,4ch ;in AH wird der Funktionswert 4ch geschrieben int 21h ;Aufruf einer DOS Funktion (Nr. in AH)

ProCode ENDS ;Ende der Segmentdefinition

(18)

Datenverarbeitungssysteme

3.4.2 Die vereinfachten Segmentanweisungen

(.MODEL; .DATA; .CODE; .STACK)

Die Anweisungen .DATA; .CODE; und .STACK definieren jeweils den Anfang eines

Segmentes und bestimmen gleichzeitig den Typ – damit ist die Zuordnung "ASSUME" nicht erforderlich. Das Ende eines Segmentes ist durch den Anfang des nächsten Segmentes bestimmt.

Die Datensegmentadresse ist durch die globale Größe "@DATA" zugänglich. Für den Zugriff auf Daten ist die Initialisierung von DS erforderlich:

mov AX,@DATA mov DS,AX

Die Anweisung ".MODEL" legt das Speichermodell fest – mögliche Parameter:

TINY Code und Daten in einem 64-KB-Segment SMALL Code < 64 KB und Daten < 64 KB

MEDIUM Code > 64 KB und Daten < 64 KB COMPACT Code < 64 KB und Daten > 64 KB

LARGE Code und Daten können die 64 KB Grenze überschreiten

(19)

Datenverarbeitungssysteme

3.5 Adressierungsarten

3.5.1 Die Registeradressierung

Bei der Registeradressierung befindet sich der Operand in einem Register. Durch die Angabe des Registernamens wird auf diesen Operanden zugegriffen

z.B.: mov AX,BX

3.5.2 Die unmittelbare Adressierung

Bei der unmittelbaren Adressierung wird der Operand einfach als Bestandteil des Befehls hingeschrieben

z.B.: mov AX,23

mov AX,3 * 4 + 24

Beim Assemblieren kann ein Ausdruck berechnet werden und dieser konstante Wert wird unmittelbar dem Befehlswort beigefügt – für den Zugriff auf den Operanden ist kein extra Speicherzugriff erforderlich.

(20)

Datenverarbeitungssysteme

3.5.3 Die direkte Adressierung

Bei der direkten Adressierung ist der Operand in einer Speicherzelle und die Adresse dieser Speicherzelle wird beim Befehl direkt angegeben.

z.B.: Im Datensegment sei eine Größe mit "var1 DW 26"

mov AX,var1

Achtung:

Bez EQU 81h

. . .

mov AH,Bez ; AH := 81h

unmittelbare Adressierung

Bez DB "Assembler"

. . .

mov AH,Bez ; AH := 41h

direkte

Adressierung Register-

adressierun Register-

adressierung

(21)

Datenverarbeitungssysteme

3.5.4 Die Index Adressierung

Bei der Index-Adressierung steht der Operand um "Index Bytes" nach einer

Anfangsadresse im Speicher. Die Adresse des Operanden ist bestimmt durch die

Anfangsadresse und den Index ("Entfernung" zur Anfangsadresse). Beim Assemblieren wird zur Anfangsadresse der Index dazu addiert und damit die Adresse (bzw. der

Offsetwert) des Operanden bestimmt.

z.B.: Definition im Datensegment: Text DB "Index Adressierung"

mov AH,Text+1 ;AH := "n"

mov DL,Text +6 ;DL := "A"

Soll nicht auf ein bestimmtes Feldelement zugegriffen werden, kann der Index auch variabel angegeben werden, indem man ihn in ein Index-Register (DI, SI) schreibt (auch BX möglich). Damit ist das Feldelement erst zur Laufzeit bestimmt.

z.B.: mov SI,4

mov AH,Text[SI] ; AH : = "x"

Index Adressierung Register-

adressierung

Unterstützende Operatoren:

TYPE SIZE LENGTH

(22)

Datenverarbeitungssysteme

3.5.5 Indirekte (Register-) Adressierung

Bei der indirekten Adressierung befindet sich der Operand wieder in einer Speicherzelle.

Die Angabe des Operanden erfolgt, indem man die Adresse (den Offsetwert) in ein

bestimmtes Register (z.B. BX oder auch SI bzw. DI) schreibt und dieses Register in eckigen Klammern als Operanden angibt. Dann wird der Inhalt dieses Registers nicht direkt als

Operand verwendet, sondern zur Adressbildung (zusammen mit dem Inhalt von DS bzw.

von SS, wenn das BP-Register verwendet wird) herangezogen.

z.B.: Definition: matrix DW 200 DUP (?)

mov BX,Offset matrix

mov [BX],10 ,an die Adresse "matrix" wird 10 geschrieben inc BX

inc BX

mov [BX],11 ;an die Adresse "matix+2" wird 11 geschrieben

indirekte

Adressierung unmittelbare

Adressierung

(23)

Datenverarbeitungssysteme

3.5.6 Die Basis-indizierte Adressierung

Bei der Basis-indizierten Adressierung wird die Offsetadresse aus der Summe der Inhalte eines Basisregisters (BX oder BP) und eines Indexregisters (SI oder DI) und einer

konstanten Adresse gebildet.

z.B.: array DB 01,02,03,04,05

DB 11,12,13,14,15

DB 21,22,23,24,25

...

...

mov BX,2 *5 ; eine Zeile entspricht 5 Bytes – d.h. Basis zeigt auf

, Anfang von Zeile 3

mov DI,3 ; der Index zeigt auf das 4. Element (0,1,2,3,4,5) mov AH,array[BX][DI] ; AH := 24

auch möglich: mov AH,[array+BX+DI]

oder mov AH,array[BX+DI]

oder mov AH,[array+BX][DI]

...

(24)

Datenverarbeitungssysteme

Adressbildungen

(25)

Datenverarbeitungssysteme

3.6 Assembler Befehle des 8086-Prozessors

3.6.1 Befehle zum Datentransfer

• Operationen die den Zugriff vorbereiten (LDS, LES, LEA)

• Zugriffsoperationen (MOV, XCHG, XLAT, XLATB)

• Befehle zum temporären Zwischenspeichern (PUSH, POP)

• Kennzeichentransferbefehle (LAHF, SAHF, PUSHF, POPF)

• Operationen zum Datenaustausch mit Peripherie - Ein-/Ausgabebefehle (IN, OUT) im Prinzip auch:

• Stringbefehle (MOVS, MOVSB, MOVSW)

(26)

Datenverarbeitungssysteme

3.6.2 Sprungbefehle

• Unbedingte Sprungbefehle JMP Sprungziel

CALL Sprungziel RET [ByteZahl]

• Bedingte Sprungbefehle (relativ) Jxx Short-Label

(Verzweigung nur, wenn ein oder mehrere Flags bestimmten Zustand haben)

• Befehele zur Schleifensteuerung (relativ) LOOP Short-Label

LOOPE/LOOPZ Short-Label LOOPNE/LOPPNZ Short-Label im Prinzip auch:

• Unterbrechungsbefehle (indirekt) INT Interrupt-Nummer

INTO IRET

(27)

Datenverarbeitungssysteme

Verzweigungen

IF <Bedingung> THEN <Befehl(e)>

IF <Bedingung> THEN <Befehl(e)> ELSE <Befehl>

z.B.

CMP AX,wert JNE M1

...a1 ....

M1: ...

z.B.

CMP AX,wert JNE M1

....a1....

JMP M2 M1:

....a2....

M2:...

(28)

Datenverarbeitungssysteme

Unterprogramme

Definition von Unterprogrammen:

Aufruf von Unterprogramm:

Rücksprung:

UPname PROC [NEAR oder FAR]

...

...

...

RET; wichtig für Rücksprung UPname ENDP

CALL UPname;

; [CS und] IP Stack ; UPname IP [und CS]

RET [Direktwert];

; 16-Bit-Wert von Stack IP

; [16-Bit-Wert von Stack CS]

; [Direktwert-Bytes werden von Stack entfernt -

; d.h. SP wird um Direktwert/2 erhöht

(29)

Datenverarbeitungssysteme

3.6.3 Verknüpfungsbefehle

3.6.3.1 Arithmetische Befehle

• Addition

ADD Ziel,Quelle ADC Ziel,Quelle AAA

DAA

INC Ziel

• Subtraktion

SUB Ziel,Quelle SBB Ziel,Quelle AAS

DAS

DEC Ziel NEG Ziel

CMP Quelle1,Quelle2

• Multiplikation MUL Quelle

IMUL Quelle AAM

• Division DIV Quelle IDIV Quelle AAD

• Vorzeichenerweiterung CBW

CWD

(30)

Datenverarbeitungssysteme

3.6.3.2 Befehle zur Bitmanipulation / Logische Befehle

• Logisch (OF, SF, ZF, PF, CF werden entsprechend verändert – nicht bei NOT!)

AND Ziel,Quelle OR Ziel,Quelle XOR Ziel,Quelle

NOT Ziel; (keine Veränderung der Flags!)

TEST Quelle1,Quelle2

• Verschieben (OF, SF, ZF, PF, CF werden entsprechend verändert)

SAL/SHL Ziel,Anzahl

z.B.:;

AL: 1100 0001b; (193) oder –63

SAL AL,1 ; AL := AL * 2

AL: 1000 0010b (130!?) oder –126

SAR Ziel,Anzahl

z.B.:; AL: 1100 0010b; -62 SAR AL,1; AL := AL / 2 AL: 1110 0001b ; -31

SHR Ziel,Anzahl

1100 0010b 0110 0001b; CF = 0 OF = 1

194 97

(31)

Datenverarbeitungssysteme

• Rotieren (OF und CF werden entsprechend verändert)

ROL Ziel,Anzahl

ROR Ziel,Anzahl

RCL Ziel,Anzahl

(32)

Datenverarbeitungssysteme

3.6.4 Stringbefehle

Alle Stringbefehle (MOVS, LODS, STOS, CMPS, SCAS) haben folgende Gemeinsamkeiten:

•= Die Adressierung erfolgt immer über die Registerpaare DS:SI und/oder ES:DI.

•= Die beteiligten Indexregister werden nach der Ausführung automatisch verändert (in Abhängigkeit von DF und Byte bzw. Wortoperation – DF = 0 +1 bzw.+2 – DF = 1 -1 bzw. -2)

•= Der Operand nach z.B. MOVS gibt nur an, ob es sich um eine Byte- oder Wort-Operation handelt.

•= Die Stringbefehle können mit Wiederholungspräfixen (REP, REPE, REPNE) versehen werden, so dass Schleifen in einer Befehlszeile programmiert werden können.

• Wiederholungspräfixe REP

REPE/REPZ REPNE/REPNZ

• Verschieben

MOVS Zielstring,Quellstring MOVSB

MOVSW

• Vergleichen

CMPS Zielstring,Quellstring CMBSB

• Durchsuchen

SCAS Zielstring SCASB

SCASW

• Laden und Speichern LODS Quellstring LODSB

LODSW

STOS Zielstring STOSB

STOSW

(33)

Datenverarbeitungssysteme

3.6.5 Befehle zur Steuerung des Prozessors

• Kennzeichenbefehle STC

CLC CMC STD CLD STI CLI

• Externe Synchronisation

HLT ; versetzt CPU in Wartezustand – Ende durch Interrupt bzw. Reset WAIT ; Warteszustand, bis TEST-Leitung gesetzt wird (z.B. von FPU) LOCK ; Präfix zur Sperrung des Busses für die Dauer eines Befehles

• Keine Operation

NOP ; keine Operation

(34)

Datenverarbeitungssysteme

3.6.6 Unterbrechungsbefehle INT Interruptnummer

INTO IRET

Ein Interrupt kann ausgelöst werden durch:

Software Hardware Exception

(35)

Datenverarbeitungssysteme

Die Interrupt-Vektortabelle

(36)

Datenverarbeitungssysteme

3.7 Makros

3.7.1 Definition und Aufruf

Definition:

Makroname MACRO [formaleParameter,...]

.... Anweisungen und Befehle...

ENDM Aufruf:

Makroname [Par1,...] ;Die Anweisungen und Befehle werden an die Stelle

;des Aufrufes kopiert und die formalen Parameter werden ;durch die aktuellen Parameter Par1,... ersetzt.

Einbinden von Makros, die in einer externen Datei (Bibliothek) definiert wurden:

INCLUDE Dateiname ; ab jetzt können auch Makros aufgerufen werden, die in

; "Dateiname" definiert wurden

Vorteil:

• Übersichtlich

• Wartungsfreundlich

• Code "Reusable"

• "Schnelle Durchführung"

(37)

Datenverarbeitungssysteme

3.7.2 Parameterübergabe und lokale Labels/Variablen

Die Parameterübergabe an das Makro erfolgt über formale Parameter

Wenn beim Aufruf mehr Parameter angegeben werden, als definiert wurden, dann werden die Überzähligen Parameter ignoriert – fehlende Parameter werden durch NUL (00h)

ersetzt.

Lokale Marken und Variblen:

Mit der Anweisung

LOCAL Name1, Name2, ...

können Marken und Variablen als lokal definiert werden, d.h. auf diese Größen kann nur innerhalb des Makros zugegriffen werden.

(Assembler ersetzt diese Größen durch "??fortlaufendeZahl" – damit sind diese Größen bei unterschiedlichen Makro-Aufrufen eindeutig unterscheidbar)

(38)

Datenverarbeitungssysteme

3.7.3 Rekursive Makros und bedingte Assemblierung

Der Turbo Assembler unterstützt auch Kontrollstrukturen der Form:

IF <Bedingung> THEN

JaAnweisungen ELSE

NeinAnweisungen ENDIF

Für: z.B. kundenspezifische Lösungen oder Debug-Informationen oder zur Erzeugung

"rekursiver Makros" (zusammen mit der Anweisung EXITM, die das weitere Einfügen des Makro-Codes abbricht).

z.B.

VorZur MACRO Z1,Z2,Z3,Z4,Z5

IFB <Z1> ; wahr, wenn kein Parameter für Z1 vorhanden ist EXITM ; keine weitere Makro-Expansion

ENDIF

Zaus Z1 ; Makro zur Ausgabe eines Zeichens VorZur Z2,Z3,Z4,Z5 ; rekursiver Aufruf

Zaus Z1 ; Ausgabe eines Zeichens ENDM

(39)

Datenverarbeitungssysteme

3.7.4 Vordefinierte Makros

REPT Ausdruck ;Der Ausdruck gibt an, wie oft die Anweisungen wiederholt werden Anweisungen

ENDM z.B.:

Anzahl EQU 40 ;Konstante, die nicht geändert werden kann

Wert = 0 ;Konstante, die aber beim Assemblieren geändert werden kann REPT Anzahl

DW Wert

Wert = Wert + 1 ENDM

40 Bytes mit: 0, 1, 2, 3, ...39

oder Wiederholungen mit einer Reihe von Parametern:

z.B.:

IRP reg,<AX,CX,SI,DI>

push reg ENDM

(40)

Datenverarbeitungssysteme

3.8 Unterprogramme

3.8.1 Definition und Aufruf

Definition:

UPname PROC [NEAR oder FAR]

...Anweisungen und Befehle...

RET ; veranlasst den Rücksprung [UPname] ENDP

Aufruf:

CALL [FAR/NEAR PTR] UPname

(41)

Datenverarbeitungssysteme

3.8.2 Parameterübergabe Die Parameterübergabe erfolgt

• über gemeinsamen Arbeitspeicher

• über Register

• über Stack Unterscheidung:

• "Call by Value" - es werden aktuelle Werte übergeben

• "Call by Reference" - es werden Adressen übergeben

3.8.2.1 Parameterübergabe über gemeinsamen Arbeitsspeicher

Das aufrufende Programm und das Unterprogramm greifen auf die gleichen Speicherplätze zu. Damit können "beliebig" viele Parameter ausgetauscht werden, allerdings werden

Parameter direkt verändert ("Call by Reference").

3.8.2.2 Parameterübergabe über Register

Das aufrufende Programm lädt die Parameter in Register und das Unterprogramm verwendet die Inhalte der Register. Allerdings ist die Registerzahl beschränkt und ein rekursiver Aufruf kaum möglich.

(42)

Datenverarbeitungssysteme

3.8.2.3 Parameterübergabe über Stack

Das aufrufende Programm speichert die Parameter vor dem Aufruf auf den Stack und im Unterprogramm wird auf die Parameter im Stack zugegriffen. Es können "beliebig" viele Parameter übergeben werden und rekursive Aufrufe sind leicht realisierbar.

aufrufendes Programm:

...

push var1 push var2 call UProg

STACK nach Aufruf:

(NEAR-Aufruf)

SP R_Adr.

var2 var1

Unterprogramm:

push BP mov BP,SP ...

mov ax,[BP + 4]; var2 AX mvo bx,[BP + 6]; var1 BX ...

mov SP,BP pop BP ret 4

STACK (nach mov BP,SP)

SP BPalt [BP]

R_Adr. [BP+2]

var2 [BP+4]

var1 [BP+6]

(43)

Datenverarbeitungssysteme

3.8.3 Rekursive Unterprogramme

In einem Unterprogramm wird das Unterprogramm selbst aufgerufen.

Definition von lokalen Marken:

Nach der Anweisung LOCALS werden alle Markennamen, die mit @@ beginnen als lokal betrachtet.

• Gültig im gesamten Unterprogramm

• Im Hauptprogramm gültig von vorheriger bis zur darauffolgender nichtlokaler Markendefinition

• Nach NOLOCALS werden die lokalen Marken wie "normale" Marken behandelt.

Vorgehen zur Verwendung und Definition von lokalen Variablen:

1. Aktuelle Parameter werden vor dem Aufruf auf dem STACK gespeichert 2. CALL speichert die Rücksprungadresse auf dem STACK

3. Im Unterprogramm wird die "alte" Bezugsadresse (BPalt) auf dem STACK gespeichert 4. Die "neue" Bezugsadresse erhält den Wert des SP

5. Reservierung von Speicherzellen im STACK durch Verändern des SP (z.B.: sub SP,6l) 6. Benennung von lokalen Variablen

var1 EQU [BP – 2]

var2 EQU [BP – 4]

var3 EQU [BP – 6]

7. Vor dem Verlassen des Unterprogramms muss der SP auf die Zelle mit der "alten"

Bezugsadresse gesetzt werden und die alte Bezugsadresse wieder in BP geschrieben werden.

(44)

Datenverarbeitungssysteme

Beispiel eines "Rekursiven Unterprogramms"

RekUP PROC push BP

mov BP,SP sub SP,6 LOCALS

var1 EQU [BP – 2]

var2 EQU [BP – 4]

var3 EQU [BP – 6]

...

mov AX,[BP+4]

mov var2,AX ...

jne @@Abbr ...

push var1 push var2 CALL RekUP ...

@@Abbr: mov SP,BP

pop BP

ret 4

STACK 1.Aufruf 2. Aufruf 3. Aufruf

? var3

? var2

? var1

BP_3 [BP]

R-Adr3 [BP + 2]

var2-3 [BP + 4]

var1-3 [BP + 6]

? var3

? var2

? var1

BP_2 [BP]

R_Adr2 [BP + 2]

var2-2 [BP + 4]

var1-2 [BP + 6]

? var3

? var2

? var1

BP_1 [BP]

R_Adr1 [BP + 2]

var2-1 [BP + 4]

var1-1 [BP + 6]

(45)

Datenverarbeitungssysteme

3.8.4 Modulkonzept

Zusammenfügen von Assemblerprogrammen die in unterschiedlichen Dateien (Modulen) stehen. Dazu müssen "Export-" (d.h. Definitionen werden auch von anderen Modulen verwendet) und "Import-Schnittstellen" (d.h. in anderen Modulen bereits definiert) definiert werden.

Beispiel:

;--- MODUL1 ---

;******* Import – Schnittstelle **********

EXTRN var1:Typ, proz1:Typ, ....

;******* Export – Schnittstelle **********

PUBLIC name1, name12, ....

;******* Definitionen v. Modul1 *********

name1 ...

name12 ...

...

mov ax,var1 call proz1 ...

;--- MODUL2 ---

;******* Import – Schnittstelle **********

EXTRN name1:Typ, name12:Typ, ....

;******* Export – Schnittstelle **********

PUBLIC var1, proz1, ....

;******* Definitionen v. Modul1 *********

var1 ...

proz1 ...

...

mov ax,name1 call name12 ...

(46)

Datenverarbeitungssysteme

3.9 Zusammenfassung

• Aufbau eines realen Prozessors

• Strukturierung des Arbeitsspeichers

• Vielfältige Adressierungsmöglichkeiten

• Zahlen- und Zeichendarstellungen

• Maschinenbefehle

• Verbindung von Hochsprachen zu Maschinenbefehlen

• Bedeutung von Statusflags

• Strukturierungsmöglichkeiten

• Bedeutung und Prinzip von STACKs

• Interruptbearbeitung

• Modulkonzept

(47)

Datenverarbeitungssysteme

3.10 Kontrollfragen

Wie wird ein Makro definiert und wozu kann man es verwenden?

Erläutern Sie den Unterschied zwischen Makro und Unterprogramm!

Vergleichen Sie einen Unterprogrammaufruf und einen Interruptraufruf. Welche Aktionen werden dabei jeweils im Prozessor durchgeführt?

Geben Sie drei unterschiedliche Beispiele für indirekte Verzweigungen an und erläutern Sie die Unterschiede.

Erklären Sie die Begriffe unmittelbare, direkte und indirekte Adressierung und geben Sie jeweils ein Beispiel. Wie werden dabei jeweils die physikalischen Adressen gebildet?

Was versteht man unter einer bedingten Verzweigung?

Erklären Sie den Unterschied zwischen Anweisung (Pseudobefehl) und Befehl.

Was versteht man unter einer hexadezimalen Zahl?

Geben Sie die Dezimalzahlen 130 und –122 in der "Zweierkomplementdarstellung" und in

Referenzen

ÄHNLICHE DOKUMENTE

Oscillatory and unstable.. H.-Parameter·space study of the stability and tentlency to o~ci1l:1te of the population with a birth-death time Jn~, ns a function of the intri:lsic rate

Wenn man n faktorisieren kann, dann kann man das RSA Problem l ¨osen (klar, d wie in der Schl ¨usselerzeugung berechnen).. Es ist ein offenes Problem, ob das RSA

Um grobe Gr ¨oßenangaben zu machen: Man verwendet ECM zum Beispiel bis 40 Dezimalstellen oder f ¨ur einen gewissen Bruchteil der erwarteten Laufzeit des QS, danach QS bis

Beim waagrechten Wurf aus der Höhe h sind die Koordinaten des Massen- Punktes durch folgende Gleichungen

Die Lösung gilt nur dann als richtig, wenn ein Graph gezeichnet worden ist, der die Bedingun- gen für die Parameter k und d

Ein Punkt ist nur dann zu geben, wenn genau zwei Aussagen angekreuzt sind und beide Kreuze richtig

[r]

Aufgabenformat: Zuordnungsformat Grundkompetenz: FA 6.3 S keine Hilfsmittel. erforderlich S