Assemblerprogramm

Beim Aufräumen meines Rechners habe ich noch einen interessanten Quelltext entdeckt, der während meines Studiums entstand, den ich niemanden vorenthalten möchte. Alles was dieses Assemblerprogramm macht, ist eine Folge von Hex-Werten in ihre ASCII-Entsprechung umzuwandeln.

Das Programm sollte auf einem MC 68000 Prozessor von Motorola noch lauffähig sein.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
* Christian Meilicke, Robert Schneider

  ORG     $0
  DC.L    $8000
  DC.L    START
  ORG     $2000

* 16 bytes mit den ascii-werten in hex darstellung
* werden im speicher abgelegt
  VALUES  DC.B    $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$41,$42,$43,$44,$45,$46

* register D0,D1,D4 loeschen bzw auf 0 setzen
  START AND.L #0,D0
  AND.L #0,D1
  AND.L #0,D4

* wert des bytes, das umgewandelt werden soll, in das datenregister D0 schreiben
  MOVE.B  #$FF,D0

* anfangsadresse des speicherbereichs, in dem die ascii werte abgelegt wurden
* in das adressregister A0 laden
  LEA     VALUES,A0

* damit am schluss der hex wert des bytes weiterhin in D0 steht,
* kopiere ich den wert in D4 und arbeite mit diesem wert weiter
  MOVE.B  D0,D4

* indem ich die zahl in D4 durch hex 10 teile,
* habe ich danach in den bits 0-15 von D4 den qoutienten, in den bits 16-31 den rest stehen
  DIVU  #$10,D4

* in D1 wird dann der wert der speicherstelle geschrieben, die in A0 steht, um die distanz
* von dem wert der bits 0-15 in D4 erweitert
  MOVE.(A0,D4),D1

* durch eine multiplikation mit hex 100 wird der inhalt an die richtige stelle nach rechts
* geschoben, sprich in das 2 byte
  MULU.W  #$100,D1

* durch den swap erreicht man eine vertauschung der 2 16-bit worten in D4
  SWAP  D4

* erklaerung dieses schrittes, siehe weiter oben
  MOVE.B  (A0,D4),D1

* hilfsdatenregister D4 wieder auf 0 setzen
  AND.L #0,D4

END BREAK