Autor Thema: 8086 und Real-Mode  (Gelesen 17278 mal)

bscreator

  • Gast
Gespeichert
« am: 11. June 2004, 17:53 »
Hi Leute,

die damaligen älteren Rechner, Intel-8086-Prozessoren, konnten nur im Real-Mode betrieben werden. Hat sich der Real-Mode von damals bis heute irgendwie verändert ? Kann ich THEORETISCH mein Betriebssystem, das noch im Real-Mode läuft, auf den alten 8086-Prozessoren ausführen ?

mfg,
bscreator

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 11. June 2004, 18:03 »
Sollte eigentlich gehen solange du keine neuartigen Prozessor-Features benutzt. (soweit ich weiß)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 12. June 2004, 12:56 »
kommt drauf an.
Du wirst im Real-Mode viel BIOS Interrupts benutzen. Diese könnten sich natürlich mit der Zeit geändert haben.

Viele Funktion des Int 0x13 gab es früher noch nicht.

Vom Prozessor her ist das exakt das selbe wie damals geblieben.
----------------------
Redakteur bei LowLevel

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #3 am: 12. June 2004, 14:19 »
Bei den Interrupts sehe ich nicht das größte Problem, da es die wichtigsten Funktionen auch schon in alten BIOS-Versionen gibt (und zur not kann man ja auch das BIOS updaten). Ein größeres Problem sind die Funktionen, die später hinzugekommen sind. Ich meine die Opcodes der CPU und somit auch die Assemblerbefehle. Ein 80186 kann den Code vom 8086 ausführen, aber der 8086 nicht den gesamten Code vom 80186. Also TeeJays Aussage
Zitat
Vom Prozessor her ist das exakt das selbe wie damals geblieben.
ist nicht ganz richtig. So versteht ein 80186 z.B. shr ax, 4, beim 8086 ist das aber "Invalid Opcode". Sowas gab es damals halt noch nicht. Wenn du aber den Assembler für den 8086er Befehlssatz konfigurierst, dürftest du keine Probleme haben.

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #4 am: 12. June 2004, 15:06 »
Musst halt auch bei den Registern aufpassen, der 8086 hat nur 16-Bit-Register (AX, BX...) und keine 32-Bit-Register (EAX, EBX...), außerdem gibt es FS und GS noch gar nicht.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #5 am: 12. June 2004, 17:34 »
Also das shr ax, 4 gibt es soweit ich gelesen habe erst ab dem 386er.
----------------------
Redakteur bei LowLevel

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #6 am: 12. June 2004, 19:07 »
Diese shr ax, 4 habe ich aber schon auf einem 186er ohne Fehler am laufen gehabt!

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #7 am: 12. June 2004, 20:15 »
hehe im Endeffekt ist das egal.

Wenn der 8086er das nicht versteht, dann ist es halt auch nicht 8086 kompatibel.

Wenn du dich also daran hälst solche Befehle die der 8086 NICHT kennt wegzulassen, dann läuft dein Programm auf jeder Machine.
----------------------
Redakteur bei LowLevel

bscreator

  • Gast
Gespeichert
« Antwort #8 am: 12. June 2004, 22:30 »
Dass ich keine 32-Bit-Register verwenden kann, ist mir klar (ist ja in jedem Real-Mode so). Naja, ich hab da gerade nen Befehl gesehen, ".8086", der soll den Befehlssatz des 8086-Prozessors aktivieren. Probier geht über studieren...

Nochwas:
Laut mastermesh ist compilierter C-Code dasselbe wie Assemblercode
(Ausgabe 5, Kapitel 3 Kernel-Entwicklung in C (diesmal auf deutsch)).
Laut dem, was ich in meinen Büchern gelesen hab, ist aber C, aus welchen Gründen auch immer, portabler als Assembler. Was ist jetzt richtig ?

The-Programmerfish

  • Beiträge: 434
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 12. June 2004, 23:06 »
Beides ist richtig. Der C-Code ist ja nur solange er C-Code ist portierbar. Beim Compilieren wird der C-Code dann zu Assemblercode übersetzt, der zu der jeweiligen Plattform gehört und nicht portabel zu anderen ist, man braucht für jede Plattform einen eigenen C-Compiler, der nur für diese Plattform geschrieben wurde. (Würde ich jetzt mal so sagen).
<- Verhasst, Verdammt, Vergöttert

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #10 am: 13. June 2004, 00:08 »
Ums mal klar auszudrücken.

Dein Prozessor versteht nur 0 und 1.
Und es gibt nun bestimmte Befehle die der Prozessor erkennt. Diese Befehle werden durch eine festgelegte Folge von 0 und 1 dargestellt.

Damit man aber als Mensch nicht ganz abdreht und nur 0 und 1 tippen muss, hat man die sog, Mnemonics? erfunden. Das sind einfach kurze Worte die leichter zu verstehen sind wie du 0 und 1.

mov ax, 1

Wird zu einer Folge von 0 und 1 vom Assembler übersetzt. Das kann dann der Prozessor lesen.
Somit schreibt man im Assembler direkt CPU-Befehle.

C-Code ist mehr eine Sprache die stärker an die menschliche Sprache angelehnt ist und daher "leichter" zu lesen ist.

Dieser C-Code wird aber ebenso in CPU-Befehle übersetzt. Sogesehen also in Assemblercode.

Und damit diese übersetzung passieren kann benötigt man einen Compiler. Wie genau ein Compiler nun:

if(x<3)
  printf("Hallo");

umsetzt, hängt vom Compiler ab. Es gibt Compiler die diesen C-Code in Assemblercode für Intel/Amd Prozessoren übersetzt. Oder es gibt auch welche die das für Motorola Prozessoren übersetzt.

Beides sind verschiedene Prozessortypen die eigene Befehle in Form von 0 und 1 Folgen verstehen.
----------------------
Redakteur bei LowLevel

bscreator

  • Gast
Gespeichert
« Antwort #11 am: 14. June 2004, 08:52 »
Danke Leute, jetzt ist alles klar

bscreator

  • Gast
Gespeichert
« Antwort #12 am: 14. June 2004, 13:26 »
Irgendwie funktioniert der Befehl '.8086' nicht unter NASM (hab ich mir ehrlich gesagt auch fast gedacht).
Hat jemand von euch eine Ahnung, wie man nur den Befehlssatz des 8086 aktiviert (so dass alle neueren Befehle, sprich 80186 usw. deaktiviert werden)?

Gruss,
bscreator

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #13 am: 14. June 2004, 13:55 »
Probier mal:
CPU 8086
----------------------
Redakteur bei LowLevel

 

Einloggen