Maschinenprogramme im Hauptspeicher

Bereiche

  Erklärung
Initialisierung:
  Variante 1: keine Überlappung
Variante 2: Ziel beginnt im Quellbereich
Variante 3: Ziel beginnt unterhalb des Quellbereichs
Variante 4: Ziel=Quellbereich
Unterprogramm MemCopy
Quell-/Zieldatenbereich
Navigation:
   Mikroprogrammspeicher
 zurück zur Dokumentation

Erklärung

Die Korrektheit der Mikroprogramme wurde mit 4 Varianten eines Maschinenprogramms getestet.
An der Adresse 0010h des Hauptspeichers beginnt bei allen Varianten dasselbe Unterprogramm MemCopy. Es erwartet im Register r0 die Adresse des zu kopierenden Bereichs (Quellbereich), im Register r1 die Adresse des Zielbereichs und im Register r2 dessen Länge.
Zunächst wird nun geprüft, ob die Bereiche sich unzulässig überlappen. Als unzulässig wird angesehen, wenn der Zielbereich an einer Adresse beginnt, die innerhalb des Quellbereichs liegt. In diesem Fall wird BMOVE nicht ausgeführt, da durch die Kopieraktion Daten des Quellbereichs bereits überschrieben werden, bevor sie kopiert wurden.
Andernfalls (wenn keine Überlappung vorliegt bzw. wenn der Zielbereich auf einer niedrigeren Adresse als der Quellbereich liegt) wird der Block mit BMOVE kopiert.
Im Sonderfall r0=r1 (Quellbereich und Zielbereich identisch), wird BMOVE auch ausgeführt.

Der Unterschied der 4 Varianten des Programms liegt im Initialisierungsteil (Adresse 0000h bis 0005h), in dem die Register r0, r1 und r2 mit Werten belegt werden. Die Besonderheiten werden in den folgenden Tabellen beschrieben.

Anfang

Variante 1: keine Überlappung

Datei: p2_20_a.mpr

Adresse Wert Mnemonic
Kommentar
Bereich

0000

1000

 move  0025h,r0 keine Überlappung:
Quellbereich von 0025h bis 002Fh
Zielbereich von 0030h bis 003Ah

Aktion:
BMOVE wird ausgeführt.
Initialisierung

0001

0025

 

0002

1001

 move  0030h,r1

0003

0030

 

0004

1002

 move  000Bh,r2

0005

000B

 

Anfang

Variante 2: Ziel beginnt im Quellbereich

Datei: p2_20_b.mpr

Adresse Wert Mnemonic
Kommentar
Bereich

0000

1000

 move  0025h,r0 Zielbereich beginnt im letzten Wort des Quellbereichs:
Quellbereich von 0025h bis 0030h
Zielbereich von 0030h bis 003Bh

Aktion:
BMOVE wird nicht ausgeführt.
Initialisierung

0001

0025

 

0002

1001

 move  0030h,r1

0003

0030

 

0004

1002

 move  000Ch,r2

0005

000C

 

Anfang

Variante 3: Ziel beginnt unterhalb des Quellbereichs

Datei: p2_20_c.mpr

Adresse Wert Mnemonic
Kommentar
Bereich

0000

1000

 move  0025h,r0 Zielbereich beginnt unterhalb des Quellbereichs:
Quellbereich von 0025h bis 002Fh
Zielbereich von 0020h bis 002Ah

Aktion:
BMOVE wird ausgeführt.
Initialisierung

0001

0025

 

0002

1001

 move  0020h,r1

0003

0020

 

0004

1002

 move  000Bh,r2

0005

000B

 

Anfang

Variante 4: Ziel=Quellbereich

Datei: p2_20_d.mpr

Adresse Wert Mnemonic
Kommentar
Bereich

0000

1000

 move  0025h,r0 Zielbereich und Quellbereich sind identisch:
Quellbereich von 0025h bis 002Fh
Zielbereich von 0025h bis 002Fh

Aktion:
BMOVE wird ausgeführt.
Initialisierung

0001

0025

 

0002

1001

 move  0025h,r1

0003

0025

 

0004

1002

 move  000Bh,r2

0005

000B

 

Anfang

Unterprogramm MemCopy

Adresse Wert Mnemonic
Kommentar
Bereich

0010

3410

 cmp  r1,r0 r0>=r1 ?

Unterprogramm MemCopy

0011

1003

 move  001Ch,r3 Sprungziel 001Ch laden

0012

001B

 

0013

8A30

 jmpc  r3 falls r0>=r1, dann gleich zu bmove springen

0014

1003

 move  FFFFh,r3 r3 mit -1 laden

0015

FFFF

 

0016

0C03

 add  r0,r3 r3=r0-1

0017

0C23

 add  r2,r3 r3=r0+r2-1

0018

3413

 cmp  r1,r3 r0+r2-1>=r1 ?

0019

1003

 move  001Dh,r3 Sprungziel 001Dh laden

001A

001D

 

001B

8A30

 jmpc  r3 falls r0+r2-1>=r1, dann über bmove hinwegspringen

001C

F102

 bmove  r2 Block kopieren

Anfang

Quell/Zieldatenbereich

Adresse Wert  
Kommentar
Bereich

0020

0001

Werte von 01h bis 10h, um Funktion von BMOVE nachvollziehen zu können Ziel von Variante 3

0021

0002

0022

0003

0023

0004

0024

0005

0025

0006

Ziel von Variante 4 Beginn des Quellbereichs

0026

0007

 

0027

0008

0028

0009

0029

000A

002A

000B

002B

000C

002C

000D

002D

000E

002E

000F

002F

0010

 

0030

0000

  Ziel von Variante 1 und Variante 2

0031

0000

 

0032

0000

 

0033

0000

 

0034

0000

 

0035

0000

 

0036

0000

 

0037

0000

 

0038

0000

 

0039

0000

 

003A

0000

 

003B

0000

 

003C

0000

 

003D

0000

 

003E

0000

 

003F

0000

 

Anfang


zu den TGI-SeitenZu den TGI-Seiten der TUM

01.07.98