Autor Thema: wie funktioniert "segment"?  (Gelesen 9898 mal)

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« 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é

vish

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« Antwort #1 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.

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #2 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é

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #3 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.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 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
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #5 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

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #6 am: 02. October 2004, 17:04 »
Woher soll der Prozessor wissen was Daten und was Code ist?;)
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 02. October 2004, 17:24 »
hmmm..
hab gedacht n computer kann soviel, dann wird der das acuh irgendwie schaffen :D

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #8 am: 02. October 2004, 22:52 »
n Computer kann erstmal garnix:D bis er programmiert wird
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 03. October 2004, 00:32 »
muahahah wir sind allmächtig ^^

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #10 am: 03. October 2004, 10:23 »
Memo an mich selbst: Größenwahnsinnig angehauchte Aussagen meinerseits führen zum Durchdrehen der Mitglieder->Unterlassen:D
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #11 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.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #12 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?

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #13 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.
----------------------
Redakteur bei LowLevel

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 04. October 2004, 22:28 »
Es sei denn man macht absichtlich Hex-Codes als Variablen wie der reboot im Lowlevel #1 ^^

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #15 am: 05. October 2004, 10:24 »
Der reboot war auch nur ein codierter Far-Jump^^ den Reboot selbst machte da das Bios:p
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #16 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.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #17 am: 06. October 2004, 12:17 »
Ok und jetzt so das ichs verstehe bitte:)
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

The-Programmerfish

  • Beiträge: 434
    • Profil anzeigen
Gespeichert
« Antwort #18 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.
<- Verhasst, Verdammt, Vergöttert

Döner Schniefer

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #19 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? :)

 

Einloggen