Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Döner Schniefer am 01. October 2004, 23:38

Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 01. October 2004, 23:38
Hi :]
ich wollt eigentlich nur fragen ob einer von euch weiß was der Assembler macht, wenn er mal zufällig auf den Mnemonic "SEGMENT" trifft? ^^
Ich mein das is ja keine x86 Instruktion? :/
Wie registriert man also ein Segment bei der CPU?
Und wie schreibt man überhaupt ein Byte, mit mov? Weil "db" is ja schon wieder keine Instruktion.

hoff hier kann mir wenigstens einer helfen ^^
cu,
andré
Titel: wie funktioniert "segment"?
Beitrag von: vish am 02. October 2004, 10:02
Von dem Mnemonic "SEGMENT" hab ich noch nichts gehört, von "mov" und "db" da schon viel mehr! :)

Also, ein Byte mit mov zu schreiben ist ganz einfach:
mov ah,11111111b
Hier kopieren wir 1 Byte (in diesem Fall die Zahl 255 (FF Hexadezimal) ) in das Prozessorregister ah.
Also gibt der erste Operand an wohin kopiert werden soll und der zweite spezifiziert die Quelle.
Man könnte also auch schreiben:
mov ah,bh
Hier würden wir dann den Inhalt aus bh ( 8 Bits, foglich ein Byte ) nach ah kopieren.

Jetzt zu "db":

"db" ist die Abkürzung für "define byte". Wenn wir nun einen String erstellen wollen, schreiben wir: name db "Ein String!"
Der Assembler erstellt so eine Variable (man kann den String auch im Programmverlauf noch ändern) mit 11 Bytes. Warum?
Ganz einfach: Ein ASCII Zeichen benötigt genau 1 Byte. Wir haben hier 11 Zeichen (das Leerzeichen ist auch ein Zeichen) und so kommen 11 Bytes zustande.
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 02. October 2004, 13:17
ok danke, aber eigentlich wusste ich dass ^^
hab mich vielleicht falsch ausgedrückt, ich probiers einfach nochmal :P:

also, zu db, wie erstellt denn der Assembler die Variable? Tut der einfach an eine freie Stelle im aktuellen Segment den String schreiben? Achso ich rede vom Real-Mode :)

Und SEGMENT damit wird der folgende Code und die Daten einfach in ein neues 64KB Segment geschrieben, aber woher weiß der Assembler welches Segment noch unbenutzt ist?

Hoffe jetzt ists verständlicher :)
André
Titel: wie funktioniert "segment"?
Beitrag von: lobmann am 02. October 2004, 15:25
Genau das ist es der Assembler weiss es nämlich nich. Segment is dafür gedacht das, das OS diese Segmente zuweisen kann.
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 02. October 2004, 16:02
Ich verwende SEGMENT garnich^^ wozu auch....
wenn du schreibst "db 0x90" dann setzt der Assembler einfach an dieser Stelle wos steht ein Byte mit dem Wert 0x90, wenn du das in den Codebereich schreibst würde der Prozi das als Code auffassen 0x90 heisst nop in dem Falle also egal, aber kann gefährlich werden. Ein Assembler ist kein C Compiler der die Variablen vor den Code sortiert, das muss der Herr Programmierer da schon selbst tun
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 02. October 2004, 17:01
ui ok thx :)

das mit dem db hab ich mir auch so überlegt, aber kam mir dann komisch vor dass der proz dass dann als code aufnimmt...

naja,
nochmal thx
cu
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 02. October 2004, 17:04
Woher soll der Prozessor wissen was Daten und was Code ist?;)
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 02. October 2004, 17:24
hmmm..
hab gedacht n computer kann soviel, dann wird der das acuh irgendwie schaffen :D
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 02. October 2004, 22:52
n Computer kann erstmal garnix:D bis er programmiert wird
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 03. October 2004, 00:32
muahahah wir sind allmächtig ^^
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 03. October 2004, 10:23
Memo an mich selbst: Größenwahnsinnig angehauchte Aussagen meinerseits führen zum Durchdrehen der Mitglieder->Unterlassen:D
Titel: wie funktioniert "segment"?
Beitrag von: lobmann am 03. October 2004, 15:10
Segment ist als Anweisung nötig wenn man Programme programmiert, wäre ja fatal wenn das Programm nur feste Adressen hätte. Beim OS-Coding brauchst du das halt nich.
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 04. October 2004, 14:19
@roshl: >XD

@lobmann: achso mkay :], aber was ist wenn man daten haben will, wir ham ja vorher festgestellt dass der CPU streikt wenn das keine instuktion is, muss man den teil mit den daten einfach über-jmp-en?
Titel: wie funktioniert "segment"?
Beitrag von: TeeJay am 04. October 2004, 15:13
Jo. Es ist deine Aufgabe dafür zu sorgen das der Prozessor nicht in Versuchung kommt DATEM als Code auszuführen. Das endet immer mit falschen Ergebnissen oder einem Reboot.
Titel: wie funktioniert "segment"?
Beitrag von: Another Stupid Coder am 04. October 2004, 22:28
Es sei denn man macht absichtlich Hex-Codes als Variablen wie der reboot im Lowlevel #1 ^^
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 05. October 2004, 10:24
Der reboot war auch nur ein codierter Far-Jump^^ den Reboot selbst machte da das Bios:p
Titel: wie funktioniert "segment"?
Beitrag von: joachim_neu am 05. October 2004, 20:35
man könnte so auch etwas proggen, wo der Benutzer die Befehle selber eingeben kann. man assembliert dann das eingegebene und schreibt es in eine variable. danach macht man dann den Maschienencode für einen Jump in den teil, wo wieder ein befehl angenommen wird. wenn dann alles fertig ist, wird an den anfang der var gesprungen, der PC führt es aus, und nimmt sich dann den nächsten befehl. allerdings muss man halt noch einige sachen mit Stack usw. machen, damit die werte, die durch die eingeben verändert werden, immer so sind, wie bei dem befehl davor, und damit nicht auf parameter im proggy eingegrigffen wird. also theoretisch könnte man so den "programmausfürteil" eines OSs machen. man ließt halt einfach die befehle aus einem sektor oder so, statt von der tastatur.
Titel: wie funktioniert "segment"?
Beitrag von: Roshl am 06. October 2004, 12:17
Ok und jetzt so das ichs verstehe bitte:)
Titel: wie funktioniert "segment"?
Beitrag von: The-Programmerfish am 06. October 2004, 13:23
Er meint vermutlich dass du Hexcodes von der Tastatur einliest sprich dass sie der Benutzer eingibt, die dann in eine Variable geschrieben werden und dann zu der Variable gesprungen wird.
Titel: wie funktioniert "segment"?
Beitrag von: Döner Schniefer am 06. October 2004, 16:31
Hey ihr Thread Missbraucher ^^


das von joachim_neu dass wär ja praktisch das guute alte input+eval() aus den hochsprachen, oder? :)