AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maschinensprache

Ein Thema von Neutral General · begonnen am 13. Okt 2004 · letzter Beitrag vom 27. Okt 2005
Antwort Antwort
Seite 8 von 10   « Erste     678 910      
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#71

Re: Maschinensprache

  Alt 20. Okt 2005, 22:24
Zitat von tommie-lie:
In was programmiert man das? In C? Könntest du mir in diesem Fall bitte mal das Makefile oder die Ausgabe von `grep include somefile.c` zukommen lassen?
Kann ich Dir nicht zukommen lassen, da ich die Sourcen nicht mehr besitze. Ist aber auch Latte, kann's ja erklaeren :)

In was man programmiert hab ich ja geschrieben : C. Setup war ein Microcontroller, die Ausgabe lief auf 'nem LC-Display, was ueber I^2C oder SPI angeschlossen war (sorry, bin mir nicht mehr ganz sicher, welches Interface). Das ging komplett ueber den gcc (spezielle Version als Cross-Compiler) ohne irgendwelchen Assembler-Code.

Mag sein, dass es Haarspalterei ist, aber es ist definitiv moeglich ein OS ohne Assembler zu entwickeln. Der sinngemaesse Ausspuch "auch C wird in Maschinensprache uebersetzt und deshalb kann man damit ein OS schreiben" hat schon seine Richtigkeit.
Ausschlaggebend dabei ist die Effizienz. Ich hab bei dem besagten Projekt auch teilweise noch Assembler benutzt. Allerdings nicht, weil es mit C nicht funktioniert haette, sondern weil der Code nicht mehr in den Speicher des Microcontrollers gepasst haette.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#72

Re: Maschinensprache

  Alt 21. Okt 2005, 07:19
Zitat von tommie-lie:
Zitat von Rastaman:
Oder kannst du mir sagen warum der Befehl
Code:
mov ax, $0013
in den 320x200x256 VGA mode schaltet?
Das kann dir niemand erklären, weil dieser Befehl das nicht tut.
Code:
mov ax, $0013
int $10
Diese beiden Befehle zusammen tun das, und warum sie das tun, ist einfach erklärt. Der Softwareinterrupt 10 kann zur manipulation der Grafikkarte herangezogen werden. In AH steht der Wert 0, das sagt dem Interrupt-Handler, daß ein neuer Videomodus gesetzt werden soll, in AL steht 0x13, das wird interpretiert als 40Zeilen/25Spalten im Textmodus bzw 320x200 Pixel im Graphikmodus, jeweils mit 256 darstellbaren Farben. Und warum ist das so? Weil die Videomodi irgendwann in der grauen Vorzeit mal festgelegt wurden.
Das was tommie-lie so schön beschrieben hat (Ich hätte es auch nicht besser schreiben können) ist übrigend das Funktionsprinzip fast aller "Funktionen" in Asm.
Es gibt verschiedene Interupts, die verschiedene Funktionen beinhalten:
z.B.:
Int 10 - Hier sind die "video" (Grafikkarte) Funktionen (vom BIOS bereitgestellt)
Int 13 - Hier sind die "disk I/O services" (vom BIOS bereitgestellt)
Int 21 - Hier sind die "function request services" (von DOS bereitgestellt)

Im Beispielprogramm ist es ja genauso.
[equote="In http://www.delphipraxis.net/internal...=250060#250060 habe ich folgendes geschrieben:"]...
  • Ein Maschinen Programm könnte also wie folgt aussehen:
    EB 0C 68 65 6C 6C 6F 20 77 6F 72 6C 64 24 BA 02 01 B4 09 CD 21 B8 01 4C CD 21
    Dieses Programm gibt auf dem Bildschirm (in der Dos Box) "hello world" aus
  • Es ist natürlich sehr schwer sich die Befehle in dieser Form zu merken, deshalb wurden für die einzelnen Befehle kleine Kürzel (so genannte mnemonische Symbole, kurz Mnemonics)
    • EB bedeutet JMP (Jump = Springe nach)
    • 0C ist der Parameter von JMP und bedeutet 12 Byte
      -> Der 1. Befehl ist also ein "goto 12 Bytes weiter"
    • 68 65 6C 6C 6F 20 77 6F 72 6C 64 24 ist die hexadezimale Darstellung von "hello world$" (genau 12 Bytes )
    • BA bedeutet MOV DX, Wert
    • 02 01 Ist der Wert (Es werden Low und High Byte vertauscht -> Wert = 0102)
      -> MOV DX, 102 -> Dieser Befehl speichert den Wert 0102 in dem Register DX des Prozessors ab
    • B4 bedeutet MOV AH, Wert
    • 09 ist der Wert
      -> MOV AH, 09 -> speichert den Wert 09 im Register AH ab
    • CD bedeutet INT Wert
    • 21 ist der Wert
      -> INT 21 -> ruft den Software Interupt 21 auf
      -> hier wird die DOS Funktion 09 mit Parameter 102 aufgerufen
      -> diese gibt den Text ab Adresse 102 bis zum $ aus
    • B8 bedeutet MOV AX, Wert
    • 01 4C ist der Wert (Es werden Low und High Byte vertauscht -> Wert = 4C01)
      -> MOV AX, 4C01 -> schreibt 4C01 in Register AX
    • CD bedeutet INT Wert
    • 21 ist der Wert
      -> INT 21 -> ruft den Software Interupt 21 auf
      -> hier wird die DOS Funktion 4C 01 aufgerufen
      -> diese beendet das Programm
  • hier noch mal das ganze Listing:
    Code:
    125A:0100 EB0C         JMP    010E
    125A:0102 68656C6C6F20  DB     "hello "
    125A:0108 776F726C6424  DB     "world$"
    125A:010E BA0201        MOV    DX,0102
    125A:0111 B409          MOV    AH,09
    125A:0113 CD21          INT    21
    125A:0115 B8014C       MOV    AX,4C01
    125A:0118 CD21          INT    21
[/equote]

Ich habe die Wichtige Stelle oben im Zitat des Tutorials mal rot markiert

Hier noch mal das ganze Listing mit Kommentaren zu den Funktionsaufrufen:
Code:
125A:0100 EB0C         JMP    010E
125A:0102 68656C6C6F20  DB     "hello "
125A:0108 776F726C6424  DB     "world$"
125A:010E BA0201        MOV    DX,0102     ; Parameter (Adresse des Strings)
125A:0111 B409          MOV    AH,09       ; Dos Funktion No 09 aufrufen (String Ausgabe)
125A:0113 CD21          INT    21          ; In Interupt wird dann obige Funktion ausgeführt
125A:0115 B8014C       MOV    AX,4C01     ; Dos Funktion 4C mit Parameter 01 wird aufgerufen (Programmende)
125A:0118 CD21          INT    21          ; In Interupt wird dann obige Funktion ausgeführt
Zitat:
INT 21,9 - Print String

AH = 09
DSX = pointer to string ending in "$"

returns nothing

- outputs character string to STDOUT up to "$"
- backspace is treated as non-destructive
- if ~Ctrl-Break~ is detected, ~INT 23~ is executed
Zitat:
INT 21,4C - Terminate Process With Return Code

AH = 4C
AL = return code (for batch files)

returns nothing

- approved method of program termination
- restores the terminate, ~Ctrl-Break~, and critical error exit
addresses, flushes all buffers, frees memory and returns to
DOS via the termination handler address
- does not close FCBs
- this function is not supported in versions of DOS before 2.x,
so use ~INT 21,0~ or ~INT 20~ to exit.

- see also ~INT 27~ ~INT 21,31~
So funktionierte das damals.
Es gibt Listen mit allen Funktionen der Interupts:
Meine damals verwendete Liste habe ich auf die schnelle nicht mehr gefunden.
Aber hier ist eine andere Liste (ist eigentlich eine Hilfedatei für HelpPC, kann aber auch so gelesen werden):
http://www.arl.wustl.edu/~lockwood/c...errup.txt.html

Zitat von tommie-lie:
Zitat von Olli:
Beim Lesen dieses Themas fiel mir nur eines ein: Aua!
Dann hattest du ja nur halb so viel Spaß wie ich
Was ich viel lustiger finde, ist:
Das Thema wurde am 13.10.2004 erzeugt.
am 14.10.2004 habe ich das mini Tutorial geschrieben, dass auch in Tutorials gepostet ist.
am 15.10.2004 war die Diskussion beendet
am 20.10.2005 also gestern also 1 Jahr und 5 Tage später stellt Dussel eine Frage und sofort (ich meine im Millisekundenbereich ) ist diese Disskusion wieder am leben.

Das finde ich immer wieder lustig
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von mh166
mh166

Registriert seit: 14. Nov 2004
Ort: Chemnitz
443 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#73

Re: Maschinensprache

  Alt 21. Okt 2005, 08:54
Zitat von MaBuSE:
Was ich viel lustiger finde, ist:
Das Thema wurde am 13.10.2004 erzeugt.
am 14.10.2004 habe ich das mini Tutorial geschrieben, dass auch in Tutorials gepostet ist.
am 15.10.2004 war die Diskussion beendet
am 20.10.2005 also gestern also 1 Jahr und 5 Tage später stellt Dussel eine Frage und sofort (ich meine im Millisekundenbereich ) ist diese Disskusion wieder am leben.

Das finde ich immer wieder lustig
Stimmt ja. Dann würd mich doch mal interessieren was aus unserem Herrn Ich-will-unbedingt-mit-0-und-1-programmieren geworden ist. Ob ers irgendwann doch noch eingesehen hat oder ob er noch dabei is, nen Text-Editor zu schreiben?

mfg, mh166
Tiefgründige Sätze unserer Zeit:
Zitat von Luckie:
Und diesen Token zur Laufzeit zu modifizieren würde bedeuten, dass du zur laufzeit das Token ändern musst.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#74

Re: Maschinensprache

  Alt 21. Okt 2005, 09:05
Zitat von MaBuSE:
Meine damals verwendete Liste habe ich auf die schnelle nicht mehr gefunden.
Wer suchet, der findet
Angehängte Dateien
Dateityp: zip interrup_161.zip (1,33 MB, 9x aufgerufen)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#75

Re: Maschinensprache

  Alt 21. Okt 2005, 09:51
Zitat von Rastaman:
Is ja super, aber nich jeder kann so toll ASM wie du, und dahinter stand halt der Kommentar.
Der Kommentar betraf beide Zeilen und die drei Buchstaben wurden nur nicht auf zwei Zeilen verteilt, weil davon ausgegangen wird, daß den Code jemand liest, der weiß, was er da in den Fingern hält

Zitat von Rastaman:
Deine Beschreibung mag einleuchten, trotzdem würd ich im Leben nich darauf kommen
Tja, RTFM, dann wüsstest du's auch.

Zitat von lizardking:
In was man programmiert hab ich ja geschrieben : C. [...] Das ging komplett ueber den gcc (spezielle Version als Cross-Compiler) ohne irgendwelchen Assembler-Code.
Sehr schön, und welche clib wurde verwendet und in welcher Sprache sind die lowlevel-Funktionen in selbiger geschrieben? printf() wird es je nach Displaygröße vielleicht nicht in einer brauchbaren Form gegeben haben, aber es gab sicherlich Funktionen, die einzelne Pixel des Displays ansteuern konnten (vorrausgesetzt die Matrix ist überschaubar, bei einem hochauflösenden Display macht sogar printf() Sinn). In C befinden sich solche Funktionen meist in Objektdateien, die in das Binary mitgelinkt werden, und nun rate mal, in welcher Sprache die geschrieben sind.

Zitat von MaBuSE:
Das was tommie-lie so schön beschrieben hat ist übrigend das Funktionsprinzip fast aller "Funktionen" in Asm.
"Fast aller" ist relativ. In einem Betriebssystem ohne eigene vollständige Laufzeitumgebung vielleicht (DOS), aber CALL und RET dürfte in einem normalen Programm wohl öfter vertreten sein als INT und IRET

Zitat von MaBuSE:
(Ich hätte es auch nicht besser schreiben können)
Danke für die Blumen

Zitat von MaBuSE:
Es gibt Listen mit allen Funktionen der Interupts:
Meine damals verwendete Liste habe ich auf die schnelle nicht mehr gefunden.
Aber hier ist eine andere Liste
Entweder hier oder im Tutorial-Thread hat Nico schon auf Ralf Browns Liste hingewiesen, die ziemlich komplett ist und die immer wieder gerne als Referenz herangezogen wird: http://www.cs.cmu.edu/~ralf/files.html
Dein Link nach arl.wustl.edu funktioniert ürigens bei mir nicht, traceroute bekommt einen Timeout beim 10. Knoten.

Zitat von MaBuSE:
Was ich viel lustiger finde, ist:
[...]
am 20.10.2005 also gestern also 1 Jahr und 5 Tage später stellt Dussel eine Frage und sofort (ich meine im Millisekundenbereich ) ist diese Disskusion wieder am leben.

Das finde ich immer wieder lustig
Och, bei diesen Popcorn-Threads ist das doch immer so


Edit: Noch früh am Morgen... (was bedeutet eigentlich "gegeneben"?)
  Mit Zitat antworten Zitat
Benutzerbild von mh166
mh166

Registriert seit: 14. Nov 2004
Ort: Chemnitz
443 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#76

Re: Maschinensprache

  Alt 21. Okt 2005, 10:05
Zitat von tommie-lie:
Zitat von lizardking:
In was man programmiert hab ich ja geschrieben : C. [...] Das ging komplett ueber den gcc (spezielle Version als Cross-Compiler) ohne irgendwelchen Assembler-Code.
Sehr schön, und welche clib wurde verwendet und in welcher Sprache sind die lowlevel-Funktionen in selbiger geschrieben? printf() wird es je nach Displaygröße vielleicht nicht in einer brauchbaren Form gegeben haben, aber es gab sicherlich Funktionen, die einzelne Pixel des Displays ansteuern konnten (vorrausgesetzt die Matrix ist überschaubar, bei einem hochauflösenden Display macht sogar printf() Sinn). In C befinden sich solche Funktionen meist in Objektdateien, die in das Binary mitgelinkt werden, und nun rate mal, in welcher Sprache die geschrieben sind.
ICh denke mal, dass es ihm nich darum ging, dass man ein OS coden kann, komplett ohne *irgendwo* ASM zu verwenden. Denn das ist - erwießenermaßen - nicht möglich. Ich glaube vielmehr, dass er meint, dass man ein OS coden kann ohne *selber* ASM verwenden zu müssen, d.h. dass es in diesem Sinne durchaus OK is, wenn in irgendner Lib - gezwungenermaßen - ASM verwendet wird.

mfg, mh166
Tiefgründige Sätze unserer Zeit:
Zitat von Luckie:
Und diesen Token zur Laufzeit zu modifizieren würde bedeuten, dass du zur laufzeit das Token ändern musst.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#77

Re: Maschinensprache

  Alt 21. Okt 2005, 10:18
Zitat von mh166:
ICh denke mal, dass es ihm nich darum ging, dass man ein OS coden kann, komplett ohne *irgendwo* ASM zu verwenden. Denn das ist - erwießenermaßen - nicht möglich. Ich glaube vielmehr, dass er meint, dass man ein OS coden kann ohne *selber* ASM verwenden zu müssen, d.h. dass es in diesem Sinne durchaus OK is, wenn in irgendner Lib - gezwungenermaßen - ASM verwendet wird.
Klar, mit der Komponente TOperatingSystem kannst du auch in Delphi ein Betriebssystem schreiben
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#78

Re: Maschinensprache

  Alt 21. Okt 2005, 10:23
Zitat von tommie-lie:
Zitat von MaBuSE:
Es gibt Listen mit allen Funktionen der Interupts:
Meine damals verwendete Liste habe ich auf die schnelle nicht mehr gefunden.
Aber hier ist eine andere Liste
Entweder hier oder im Tutorial-Thread hat Nico schon auf Ralf Browns Liste hingewiesen, die ziemlich komplett ist und die immer wieder gerne als Referenz herangezogen wird: http://www.cs.cmu.edu/~ralf/files.html
Das war auch die die ich verwedet habe
In meinem Letztem Beitrag ist die Liste (als >6MByte großes AsciiTextfile) zu finden.
Die hatte vorallem auch die undokumentierten Funktionen aufgelistet. (z.B. die von auf dem System aktiven Viren )
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#79

Re: Maschinensprache

  Alt 21. Okt 2005, 10:51
Zitat von tommie-lie:
Klar, mit der Komponente TOperatingSystem kannst du auch in Delphi ein Betriebssystem schreiben
Prinzipiell schon. Aber das müsste dann eher eine Komponentensammling sein, die da wäre:

TPCEmulator -> um den Zielrechner zu simulieren (gibt's mit Boch's als OpenSource)
TBiosChip -> Damit der Rechner weiß, was er nach dem Einschalten als Erstes tun muß
TBootDisk -> mit eingelagertem HexEditor für die Bootsequenz (Zumm Booten des Systems)
TGraphicCard -> Ein Grafikadapter zum Anzeigen der Systemausgaben
TMonitor -> Erst hier wären die Ausgaben wirklich zu sehen
TCDROM -> CD-Laufwerk nur lesen
TCDRW -> CD-Laufwerk mit Brenner
(vielleicht reicht hier im Design auch ne Eigenschaft, die die Art des CD-Laufwerkes beschreibt, als nur Lesen, Lesen/schreiben)
TDVD -> DVD Laufwerk

Das Formular müßte zuerst den PCEmulator aufnehmen, dann folgen die anderen Komponenten, die gemäß der Hardware-Konfiguration über passende Eigenschaften zusammengeschlossen werden. Danach folgt der Software Teil. Dafür müssen geeigete Speicherplätze in den KOmponenten vorhanden sein.

In einer PCEmulator Komponente könnte man die Befehllssätze verschiedene CPU's definieren und als Eigenschaft im OI dann einen auswählen. Wie beschreibt man so einen Befehlssatz? Entweder mit einer Tabelle mit allen möglichen Befehlskombinationen. Oder mit speziellen Beschreibungssprachen, falls es sowas gibt. Intel und AMD müssen ja den Befehlssatz für Ihre CPU's auch irgendwo beschreiben. Und VMWare auch.

Zum Grafikadapter:

Ich kenne VMWare. Dort wünschte ich mir eine Hardwarenähere Simulation meiner physikalischen GK
Praktisch ein Wrappen auf meine echte. Da aber der Grafikadapter in VMWare sehr langsam ist, gehe ich davon aus, das alle Funktionen der GK softwaremäßig perfekt nachgebildet sind, statt dort im Gegensatz zu den übrigen PC Komponenten auf die physikalische GK zurückzugreifen.


Sinnvoll wäre das Ganze schon. Aber wer entwickelt die Komponenten? Dürfte einigen Aufwand bedeuten!

schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#80

Re: Maschinensprache

  Alt 21. Okt 2005, 11:20
Zitat von MaBuSE:
In meinem Letztem Beitrag ist die Liste (als >6MByte großes AsciiTextfile) zu finden.
http://www.delphi-forum.de/images/smiles/icon_lupe.gif Den Beitrag habe ich glatt ignori^Wübersehen

Schöni, ich weiß nicht, ob du die Ironie in meinem Beitrag nicht erkannt hast, oder ob ich jetzt deine nicht erkenne.
Komponenten zur Emulation eines Computer sind nicht notwendig, als vollständigen x86-Emulator hat man ja Bochs, wenn das Betriebssystem erstmal funktioniert. Neben TOperatingSystem bräuchte man nur noch TMarketDominance (aus Microsoft-internen Kreisen wurde mit bekannt, daß Microsoft bereits an einer Ableitung dieser Klasse arbeitet, TWorldDominance).

Zitat von schöni:
In einer PCEmulator Komponente könnte man die Befehllssätze verschiedenee CPU's definieren und als Eigenschaft im OI dann einen auswählen.
Braucht's nich, der dcc kompiliert eh nur nach IA32. Wenn man die Fließkommaerweiterungen von AMD außen vor lässt reicht ein Pentium4 für alles bisher dagewesene.

Zitat von schöni:
Intel und AMD müssen ja den Befehlssatz für Ihre CPU's auch irgendwo beschreiben. Und VMWare auch.
VMware nimmt einfach die physikalisch vorhandene CPU daher, die machen sich gar nicht die Mühe, den Prozessor zu virtualisieren.

Zitat von schöni:
Ich kenne VMWare. Dort wünschte ich mir eine Hardwarenähere Simulation meiner physikalischen GK
ACK (man will ja mit normaler Geschwindigkeit mit Managed DirectX rumspielen ). Aber Workstation 5 hat ja immerhin eine experimentelle Unterstützung für Direct3D.


Disclaimer: Dieser Beitrag kann nicht unwesentliche Mengen nicht ernstgemeinten Textes enthalten. Der Autodieses Beitrags bittet um Verständnis und schließt sämtliche Rechtsansprüche auf durch Ironie oder Srakasmus entstandene Schäden aus.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 10   « Erste     678 910      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz