16 Bit Assembler unter Win10

Robion

Cadet 1st Year
Registriert
Feb. 2021
Beiträge
9
Hallo,

ich weiß nicht genau, wodrunter ich das besser posten sollte: Windows10 oder hier in Programmieren.

Naja, fangen wir mal so an:
Ich muß nun doch endlich mal möglichst schnell python, assembler, c, c++ und naja, etwas Javascript lernen.
[Bislang hab ich nur etwas php gebraucht.]
Klar, Programmierprinzipien lernt man recht schnell mit python. Schnelle Erfolge, weil' im browser läuft = Javascript.
Aber ich müßte auch Assemlber lernen. Ich hab dazu schon ein Buch von Rainer Backer, (rororo), aber der fängt da natürlich mit einfachem 16 Bit an.
Das Blöde ist nun, daß ich seit einigen Jahren ein 64Bit Windowssytem (die 32er (Win7) hatten noch lange 16Bit Laufzeitunterstützung.) habe.
Vor Jahren habe ich schon mal versucht, DOS-Box zu installieren und damit/darin bereits fertige, ältere Kommandozeilen Assemblerprogramme (16 Bit) [nichts Wildes, einfach Stringverarbeitung in Dateien] zu starten, was aber keine zuverlässigen Ergebnisse brachte (die Programme liefen/starteten zwar und gaben Erfolgsmeldungen aus, aber die Dateien waren nicht bearbeitet worden. Eigentlich ja relativ Prozessor unabhängige Befehle)

OK, dann bliebe noch, die Assembler [Turbo oder Masm] in einer Virtuellen Maschine zu installieren. Braucht man aber DOS [weiß nicht, ob das mit FreeDos auch gehen würde]. Und wo bekäme man DOS 6.22 heute noch her?

Wie würdet Ihr das angehen?
a) welche Sprachen zuerst lernen (asm, c++, c, python)
b) womit? (wenn es geht - v.a. komplizierte Sachverhalte doch besser auf deutsch) - auch wenn Englisch die gänige Hauptsprache ist - OK, ich kann zwar englisch, aber manches, was man so auf stackoverflow oder woanders liest ist schon recht speziell und wegen auf-Slang-reduziertem Englisch oft schwer, sicher zu interpretieren.
c) und wie Assembler (16/32 Bit) lernen/ laufen lassen
 
Zuletzt bearbeitet:
Du könntest winevdm probieren, das bringt 16 Bit Anwendungen unter nem 64 Bit Windows zum Laufen. Sonst musst du halt mit ner VM arbeiten.
 
Kommt drauf an wo du hin willst - Assembler würde ich nur lernen wenn es auch einen Sinn für mich macht. Jetzt kommen gleich die Hardcore-Experten und sagen du musst deine ersten Programme Binär auf Lochkarten schreiben - ich behaupte, man kann Autofahren lernen und muss selbst nicht in der Lage sein einen Motor zu bauen!

Python ist eine gute Sprache für viele Dinge und es gibt sicher sehr fähige Python-Entwickler die weder C noch Assembler können. Klar kann es helfen zu verstehen was ein Compiler macht und wie Bytecode dann von der CPU ausgeführt wird, aber wenn du nicht gerade hardwarenah programmierst oder Bufer Overflow Exploits schreibe möchtest, ist das vielleicht einfach nicht nötig?
 
  • Gefällt mir
Reaktionen: madmax2010
Wofür möchtest du denn Assembler lernen?

Wenn es nur um die Prinzipien geht, würde ich mir x86 nicht antun. DLX, MIPS sind hier die klassischen Lehr-Befehlssätze für Rechnerarchitektur, wo es auch Simulatoren für gibt. RISC-V wäre eine moderne Lösung wo es gute Dokumentation und auch genügend Möglichkeiten gibt, dass auf einem Desktop PC auszuführen.

Oder aber ich würde C schreiben und dann Inline-Assembler verwenden, so dass es direkt auf deinem PC läuft, ohne höllischen Aufwand mit dem Betriebssystem zu interagieren. (Oder einzelne Assembler-Files die dann von C aus aufgerufen werden).

Wenn es dir um Low-Level Hardware Interaktion geht, würde ich irgendeinen Microcontroller nehmen und auf dem mit Assembler arbeiten, auch wenn man bei den größeren wahrscheinlich auch einen Teil C zur Platform Initialisierung und Setup nicht leicht los wird.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Hayda Ministral
Google mal den MARS-Simulator. Glaub, den haben wir damals an der Uni benutzt, um einfach mit Assembler anzufangen.
 
  • Gefällt mir
Reaktionen: Ray519 und madmax2010
Ich habe auch noch Assembler lernen müssen (Informatikstudium FH). Aber schon 2 Jahre später haben sie Assembler durch C++ ersetzt. Das war 1994. Ich sehe heute auch keinen Sinn mehr in Assembler, außer in extrem engen Nischen..
 
Robion schrieb:
OK, dann bliebe noch, die Assembler [Turbo oder Masm] in einer Virtuellen Maschine zu installieren. Braucht man aber DOS [weiß nicht, ob das mit FreeDos auch gehen würde]. Und wo bekäme man DOS 6.22 heute noch her?
Da findet man auf die schnelle einige Quellen, die alte BS bereit stellen. Ich stelle mal keine Links ein, da muss man selbst mal prüfe, ob die jeweiligen Seiten legal sind und keine Malware mitbringen.

Das ganz in einer virtuellen Maschine laufen zu lassen ist wohl die beste Lösung, insbesondere wenn es nur zu Lehrzwecken genutzt wird.

An der Schule haben wir mit CoSI (Computersimulation) ein sehr vereinfachtes Assembler ausprobiert. Um die Grundzüge zu verstehen ist das bestimmt nicht schlecht, auch wenn es ziemlich alt ist.

https://www.zum.de/Faecher/Inf/RP/cosi.htm
 
Robion schrieb:
Wie würdet Ihr das angehen?
Erstmal: kann man nicht 16bit-Support in Win10/64 aktivieren?
https://www.groovypost.com/howto/enable-16-bit-application-support-windows-10/
Edit: ahhhh, geht nur mit 32bit-Windows 10:
https://docs.microsoft.com/en-us/windows/compatibility/ntvdm-and-16-bit-app-support


Ansonsten: vieles aus der 16bit-Welt lässt sich relativ leicht in 32bit übernehmen.

Man kann auch sehr komfortabel Assembler mit VS 2019 entwickeln und debuggen (das Wichtigste), idem man dem .asm-File den MASM zuordnet:
http://www.asmirvine.com/gettingStartedVS2019/index.htm

Hier ein Screenshot von meinem Rechner ("Hello World" in ASM und C):
vs2019asm.png
 
Zuletzt bearbeitet:
puh, ja, damit hab ich ja gar nicht gerechnet - mit soviel Antworten.
Meist gehn solche Themen ja unter.
ja, ich werde Assemlber brauchen, da ich auch compilierten Code debuggen können muß.
D.h. ich werde da auch mit IDA und Ollydgb dran müssen.
Bis Anfang September hab ich ja noch Zeit.
Aber irgendwie werde ich mir das alles reinziehn müssen, bis dahin.
Gut, die Sprachen (python vs die andern) haben alle verschiedene Einsatzgebiete und Schwerpunkte
Ich denke python werd ich zum Analysieren brauchen.
c ud c++ zum Entwickeln und Anpassen.

16-Bit wird in den paar Assembler-Büchern verwendet, die es gibt.
Darum dachte ich, ich möchte das so gut es geht, vollständig nachvollziehen, ohne überspringen zu müssen.
Also ich finde das einerseits nich so schwer - so vielel Befehle gibt es ja nicht - aber andererseits schon heftig, zu verstehn, was wann in welche Register muß und wann wo mit welchen Flags steht.

Ja, ich denke auch, eine Virtuelle Maschine wird wohl das beste sein.
 
Robion schrieb:
Wie würdet Ihr das angehen?
Mich als erstes von 16 Bit verabschieden, die paar Dinge, die 16 Bit spezifisch sind, überfliegen und dann das ganze inline in C/C++ einbauen.

Robion schrieb:
a) welche Sprachen zuerst lernen (asm, c++, c, python)
Was ist das Ziel? Ja, dumme Frage, aber weder ASM noch C werden m.W.n. abseits von embedded Entwicklung wirlich noch häufig genutzt. Daher würde ich mit C++ anfangen und dort den wohl benötigten ASM-Code inline einbinden.

Schon das dürfte in der kurzen Zeit nicht trivial sein, da man Programmiersprachen eher anhand von konkreten Beispielen lernt (spätestens die Feinheiten). Geht es darum, objektorientierte Paradigmen zu lernen, ist C/ASM nicht angebracht. Geht es darum die Fallstricke von C oder ASM am eigenen Leib zu erfahren, hat das mit C++ nicht mehr viel zu tun.

Robion schrieb:
Da es wohl auf Windows laufen soll, wohl am ehesten mit MS Visual Studio.

Robion schrieb:
ja, ich werde Assemlber brauchen, da ich auch compilierten Code debuggen können muß.
D.h. ich werde da auch mit IDA und Ollydgb dran müssen.
Und das mit 16 Bit Assembler. Interessant. Klar baut 32 Bit auf 16 Bit auf, aber wenn Du Dich in der wohl recht kurzen Zeit z.B. auch noch mit den Fallstricken von 16 Bit Speichermodellen herum ärgern möchtest (ohne es zu müssen), dann finde ich das den falschen Weg.

Wenn man das ganze 16-Bit Zeugs nur überfliegen will, könnte z.B. das hier etwas zur Einführung sein:
https://homepages.thm.de/~hg6458/
-> Systemprogrammierung: https://homepages.thm.de/~hg6458/mprog.html
-> Skript im A4-Format (Stand März 2003, PDF-Datei, Acrobat Reader erforderlich)
Wobei ich natürlich keine Ahnung habe, wie gut das für einen Einsteiger geeignet ist. Beim Überfliegen geht er kurz auf die 16-Bit Besonderheiten ein, nutzt dann aber gemischt 16 und 32 Bit Register und nimmt auch ein Beispiel von ASM Code auseinander, welches vom Compiler erzeugt wurde.

Robion schrieb:
Also ich finde das einerseits nich so schwer - so vielel Befehle gibt es ja nicht - aber andererseits schon heftig, zu verstehn, was wann in welche Register muß und wann wo mit welchen Flags steht.
Klar, ein paar Kommandos lernt man schnell, u.U. auch noch, welche davon mit welchen Registern nutzbar sind. Wenn es dann aber darum geht, nicht nur Spagheticode zu schreiben oder den eigenen, gut dokumentieren ASM-Quelltext sondern unbekannten Code zu anaysieren, gehört einiges mehr an Erfahrung (=Zeitaufwand) dazu.
 
Zuletzt bearbeitet:
Robion schrieb:
D.h. ich werde da auch mit IDA und Ollydgb dran müssen.
Und warum dann mit 16 Bit anfangen? All zu viel Assembler braucht man da gar nicht, sondern man muss eher wissen wie ein Prozessor aufgebaut ist, was die ganzen Register bedeuten, wie ein Programmablauf funktioniert, welche Rgister bei einem Methodenaufruf benutzt werden, was der Stackpointer ist usw. usw.

Edit: Auch ganz hilfreich zum verstehen ist vielleicht das hier: https://godbolt.org/
 
Zuletzt bearbeitet:
Zurück
Oben