Content

ULM-Simulator installieren

Der ULM-Simulator ist selbst in C++ geschrieben. Um diesen benutzen zu können, sind folgende Schritte notwenig:

Demo für das Herunterladen und installieren

$shell> wget http://www.mathematik.uni-ulm.de/~lehn/ulm.cc
--2016-04-23 12:10:21--  http://www.mathematik.uni-ulm.de/~lehn/ulm.cc
Resolving www-proxy.uni-ulm.de... 134.60.1.151
Connecting to www-proxy.uni-ulm.de|134.60.1.151|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 14696 (14K)
Saving to: 'ulm.cc'

     0K .......... ....                                       100% 10.4M=0.001s

2016-04-23 12:10:21 (10.4 MB/s) - 'ulm.cc' saved [14696/14696]
$shell> g++ -Wall -std=c++11 -o ulm ulm.cc
$shell> ls
ulm
ulm.cc
$shell> 

Format für Programme in ULM-Maschinencode

Ein Programm in ULM-Maschinencode, das mit dem ULM-Simulator ausgeführt werden kann, sieht beispielsweise so aus

81 20 00 05     # orq  $32,  %0,  %5
11 05 F8 0A     # movq -8(%5),     %10
00 00 00 00     # halt
00 00 00 00     # halt
00 00 00 00     # halt
00 00 00 00     # halt
FF FF FF FF     # .quad -1
FF FF FF FF     #

Zu beachten ist:

Auch dieses Beispiel kann mit wget geladen werden:

$shell> wget http://www.mathematik.uni-ulm.de/~lehn/example.ulm
--2016-04-23 12:10:23--  http://www.mathematik.uni-ulm.de/~lehn/example.ulm
Resolving www-proxy.uni-ulm.de... 134.60.1.151
Connecting to www-proxy.uni-ulm.de|134.60.1.151|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 213
Saving to: 'example.ulm'

     0K                                                       100% 36.7M=0s

2016-04-23 12:10:23 (36.7 MB/s) - 'example.ulm' saved [213/213]
$shell> 

Demo zum Testen des ULM-Simulators

Auf der Kommadozeile startet man die ULM, indem man als Argument den Dateinamen für ein Maschinenprogramm übergibt. Zum Beispiel

./ulm example.ulm

Per Default wird die ULM dieses Programm interaktiv ausführen, das heisst

Die Maschine kann auch nicht-interaktiv mit der Option -r (run) gestartet werden. Dann rauscht das durch wie in diesem Demo:

$shell> ./ulm -r example.ulm
CPU cycles done    0

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
81 20 00 05 11 05 f8 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|0                      |8                      |16                     |24                     |32                     |40                     |48                     |56                     
|0x0                    |0x8                    |0x10                   |0x18                   |0x20                   |0x28                   |0x30                   |0x38                   

Reg0    0x0000000000000000
Reg1    0x0000000000000000  IP: 0
Reg2    0x0000000000000000  IR: halt
Reg3    0x6c00706d5f00706d
Reg4    0xfefc873708046a5c
Reg5    0xfec39211fec39211
Reg6    0xfee004f008046ab0
Reg7    0x0000a004feffa910
Reg8    0xfec2fd88fefe2cee
Reg9    0xfeffa9100000075d
Reg10   0xfee004f0fefd2c62
Reg11   0xfec25ad0fec287b8
Reg12   0xfee28ee4fefe2cee
Reg13   0xfeffa910000011af
Reg14   0x3874534e3774534e
Reg15   0xfefc873708046ab4


ZF = 0, OF = 0, SF = 0, CF = 0


CPU cycles done    1

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
81 20 00 05 11 05 f8 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|0                      |8                      |16                     |24                     |32                     |40                     |48                     |56                     
|0x0                    |0x8                    |0x10                   |0x18                   |0x20                   |0x28                   |0x30                   |0x38                   

Reg0    0x0000000000000000
Reg1    0x0000000000000004  IP: 4
Reg2    0x0000000081200005  IR: orq   $32, %0, %5
Reg3    0x6c00706d5f00706d
Reg4    0xfefc873708046a5c
Reg5    0x0000000000000020
Reg6    0xfee004f008046ab0
Reg7    0x0000a004feffa910
Reg8    0xfec2fd88fefe2cee
Reg9    0xfeffa9100000075d
Reg10   0xfee004f0fefd2c62
Reg11   0xfec25ad0fec287b8
Reg12   0xfee28ee4fefe2cee
Reg13   0xfeffa910000011af
Reg14   0x3874534e3774534e
Reg15   0xfefc873708046ab4


ZF = 0, OF = 0, SF = 0, CF = 0


CPU cycles done    2

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
81 20 00 05 11 05 f8 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|0                      |8                      |16                     |24                     |32                     |40                     |48                     |56                     
|0x0                    |0x8                    |0x10                   |0x18                   |0x20                   |0x28                   |0x30                   |0x38                   

Reg0    0x0000000000000000
Reg1    0x0000000000000008  IP: 8
Reg2    0x000000001105f80a  IR: movq -8(%5), %10
Reg3    0x6c00706d5f00706d
Reg4    0xfefc873708046a5c
Reg5    0x0000000000000020
Reg6    0xfee004f008046ab0
Reg7    0x0000a004feffa910
Reg8    0xfec2fd88fefe2cee
Reg9    0xfeffa9100000075d
Reg10   0xffffffffffffffff
Reg11   0xfec25ad0fec287b8
Reg12   0xfee28ee4fefe2cee
Reg13   0xfeffa910000011af
Reg14   0x3874534e3774534e
Reg15   0xfefc873708046ab4


ZF = 0, OF = 0, SF = 0, CF = 0


CPU cycles done    3

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
81 20 00 05 11 05 f8 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|0                      |8                      |16                     |24                     |32                     |40                     |48                     |56                     
|0x0                    |0x8                    |0x10                   |0x18                   |0x20                   |0x28                   |0x30                   |0x38                   

Reg0    0x0000000000000000
Reg1    0x000000000000000c  IP: 12
Reg2    0x0000000000000000  IR: halt
Reg3    0x6c00706d5f00706d
Reg4    0xfefc873708046a5c
Reg5    0x0000000000000020
Reg6    0xfee004f008046ab0
Reg7    0x0000a004feffa910
Reg8    0xfec2fd88fefe2cee
Reg9    0xfeffa9100000075d
Reg10   0xffffffffffffffff
Reg11   0xfec25ad0fec287b8
Reg12   0xfee28ee4fefe2cee
Reg13   0xfeffa910000011af
Reg14   0x3874534e3774534e
Reg15   0xfefc873708046ab4


ZF = 0, OF = 0, SF = 0, CF = 0
$shell>