• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Mmix

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
Kennt hier jemand den virtuellen Prozessor MMIX von Donald Knuth?
Das benutzen wir im zweiten Semester in Informatik um Assembler zu lernen. Ich hab mir hier die Mac OS X Binaries runtergeladen. ich kann die auch ausführen, aber wo und wie ich dann den MMIX-Code ausführen kann, so dass es dann funktioniert, hab ich noch cniht rausgefunden.
Weiß da jemand mehr?
 

Bölzebub

Querina
Registriert
27.05.05
Beiträge
180
Soweit ich weiß ist "mmixal" der Assembler und "mmix" der Interpreter. Im Zweifelsfall also deinen Assembler-Code mit "mmixal" übersetzen und die entstandene Datei dann mit "mmix" ausführen.
 

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
danke für die Antwort.

Hmm, dann sollte das ja eigentlich so funktionieren:
142068132_19fd139ee2_o.png

Tut es aber leider nicht. und das, obwohl ich die dre Binaries im selben ordner wie hello_world.mms habe. o_O
 

Bölzebub

Querina
Registriert
27.05.05
Beiträge
180
OS X ist ein Unix und kein M$-DOS. "./" für Programme im aktuellen Ordner. Also "./mmixal helloworld.mms".

Oder mmixal und mmix nach /usr/bin kopieren. Dann klappts auch ohne "./".
 
  • Like
Reaktionen: Juuro

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
Juhuu!! Daran lags! Vielen Dank!

Eine frage hab ich trotzdem noch, wie bewege ich mmixal und mmix nach /unr/bin? Denn der usr ordner ist ja standardmäßig versteckt. In den Darstellungsoptionen des fidners hab ich keine Einstellung gefunden, mit der ich versteckte Objekte sichtbar machen kann.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Bewegen im Terminal mit dem "mv"-Befehl. Nach /usr/bin solltest Du die Software aber an sich nicht kopieren. Besser wäre /usr/local/bin, der Ordner ist für nachinstallierte Software bestimmt.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Bölzebub schrieb:
OS X ist ein Unix und kein M$-DOS. "./" für Programme im aktuellen Ordner. Also "./mmixal helloworld.mms".

Oder mmixal und mmix nach /usr/bin kopieren. Dann klappts auch ohne "./".
1. Der Vergleich is Blödsinn
2. Das mit /usr/bin ist Humbug.

zu 1) In Unix - genau wie in MS-DOS gibt es eine Umgebungsvariable "PATH". Wenn darin "." auftaucht (also z.B. ".:/usr/bin", dann werden auch Programm im aktuellen Verzeichnis ausgeführt.

zu 2) Wenn Du das Programm in irgendeins der Verzeichnisse kopierst, die in "PATH" aufgeführt sind, klappt es unter Umständen auch ohne ./. "Unter Umständen"? Ja! Denn was ist, wenn das Programm weitere Dateien benötigt, die im selben Verzeichnis liegen. Besser also: Kopiere die Programme und alles was dazu gehört in ein eigenes Verzeichnis und nimm das in die PATH Variable auf.
 

Juuro

Schafnase
Registriert
07.11.05
Beiträge
2.256
Äh danke, und wo soll ich diese PATH variable dann ändern? :oops:
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Juuro schrieb:
Äh danke, und wo soll ich diese PATH variable dann ändern? :oops:
Hängt prinzipiell von Deiner shell ab. Wenn es der Standard ist, kannst Du das z.B. in die Datei ~/.profile einbauen.

Mal ein Beispiel:
Sei Dein Verzeichnis, in dem Du das Programm hast ~/mmix
Dann kannst Du mit folgendem die Datei zum PATH hinzufügen:
Code:
#!/bin/sh
PATH=~/mmix:$PATH
export PATH

Oder, wenn Du es "komfortabler" möchtest
Code:
#!/bin/sh
addpath () {
        P=$1
        shift
        while [ -n "$1" ]
        do      case :$P: in
                *:$1:*) ;;
                *) P=$P:$1 ;;
                esac
                shift
        done
        echo $P
}

PATH=`addpath $PATH $HOME/mmix`
export PATH

"komfortabler" meint hier: Wenn Du mehr als einen Pfad irgendwann hinzufügen möchtest, dann ist so eine Lösung meines Erachtens praktisch, weil sie nur solche Verzeichnisse hinzufügt, die nicht schon im Pfad stehen.
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Die zweite Lösung ist ziemlich krass... :-D
Wenn ich das richtig sehe, hat das nur einen Haken: Wie stellst Du sicher, dass der hinzugefügte Pfad am Ende vorne in PATH steht? Manchmal braucht man das ja, wenn man z.B. ein bestimmtes Programm (etwa einen selbstgebauten Compiler) aus einem ganz bestimmten Verzeichnis heraus ausführen will und nicht aus dem erstbesten.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
quarx schrieb:
Die zweite Lösung ist ziemlich krass... :-D
Wenn ich das richtig sehe, hat das nur einen Haken: Wie stellst Du sicher, dass der hinzugefügte Pfad am Ende vorne in PATH steht?
Das siehst Du richtig. Das geht so nicht. Ich hatte schon mal eine komplexere Variante. Da hast Du dann den Teilen, die nach vorne sollten, ein '+' voran gestellt. Da ich das aber nie verwendet habe, ist das irgendwann wieder untergegangen.

Einfacher ist es aber, sich eine Funktion "leftpath" zu bauen:
Code:
leftpath () {
        P=$1
        shift
        while [ -n "$1" ]
        do      case :$P: in
                *:$1:*) ;;
                *) P=$1:$P ;;
                esac
                shift
        done
        echo $P
}

Die würde die neuen Teile in umgekehrter Reihenfolge vorne anhängen.

Oder frontpath:
Code:
frontpath () {
        P=$1
        F=''
        shift
        while [ -n "$1" ]
        do      case :$F$P: in
                *:$1:*) ;;
                *) F= $F$1: ;;
                esac
                shift
        done
        echo $F$P
}
Die sollte (nihct getestet) es in richtiger Reihenfolge vorne "anflanschen".