mikrocontroller.net

Forum: PC-Programmierung asm x86 register : was ist das x ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Kritical R. (kritical_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich habe mal, noch bevor ich das buch
https://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren
durch habe, ich bin auf seite 32 ;)

mir ein wiki vom bios angeschaut
https://www.lowlevel.eu/wiki/Bootloader

da steht:
"Wenn das BIOS die Kontrolle an den Bootloader übergeben hat, gibt es 
einige Dinge, die jedes BIOS standardmäßig sicherstellen muss:
...
CS:IP ist entweder 0x7C0:0x00 oder 0x00:0x7C00
..."

CS ist doch ein CPU adress register und :IP wird dann wohl die 
eingestellte adresse sein

1. wie liest man den das x?

2. macht das bios diesen eintrag? im buch steht man kann auf CS nicht 
direkt zugreifen

Autor: egbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Effektive Adresse im "Real Mode" = (CS << 4) | IP

Autor: c-hater (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Kritical R. schrieb:

> CS:IP ist entweder 0x7C0:0x00 oder 0x00:0x7C00
> ..."
>
> CS ist doch ein CPU adress register und :IP wird dann wohl die
> eingestellte adresse sein

Beides sind CPU-Register. Wenn du nichtmal das weißt, bist du falsch.

> 1. wie liest man den das x?

Das "0x" zeigt in C-Notation an, dass es sich um Hexzahlen handelt. Wenn 
du nichtmal das weißt, bist du falsch.

> 2. macht das bios diesen eintrag?

Nein, das BIOS macht überhaupt keinen Eintrag. Das lädt nur ein paar 
Daten auf ein paar Speicheradressen und springt dann dorthin, um sie als 
Programm interpretiert auszuführen. Kann durchaus funktionieren (wenn 
die Daten sinnvollen Code darstellen). Ansonsten: Crash mit 
unvorhersehbarem Ausgang.

> im buch steht man kann auf CS nicht
> direkt zugreifen

Das ist Quatsch. Natürlich kann man das CS-Register (wie jedes andere 
Segemntregister auch) lesen und auch schreiben. Welches Buch erzählt so 
einen Schwachsinn? Kann es sein, dass du nur irgendwas falsch verstanden 
hast?

Autor: Kritical R. (kritical_r)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
also im oben erwähntem buch steht:
Adressregister
CS-, DS-, ES- und SS-Register
Eine spezielle Bedeutung unter den Registern haben die Segmentregister 
CS (Codsegmentregister),
DS (Datensegmentregister), ES (Extrasegmentregister) und SS 
(Stacksegmentregister).
Sie bilden im so genannten Real Mode gemeinsam mit dem Offset die 
physikalische
23
Der Prozessor
Adresse. Man kann sie nur dafür nutzen; sie können weder als allgemeine 
Register benutzt,
noch direkt verändert werden.

und im nasm schreiben ich auch immer ein "h" für hexadezimal

ist doch genau richtig hier oder :D

Autor: c-hater (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Kritical R. schrieb:

> also im oben erwähntem buch steht:

Welches Buch ist das denn nun genau? Weil: Es taugt ganz offensichtlich 
nix...

> Man kann sie nur dafür nutzen; sie können weder als allgemeine
> Register benutzt,
> noch direkt verändert werden.

Davon stimmt bestenfalls nur die erste Hälfte der Aussage. Ja: als 
allgemeine Register können die Segemntregister tatsächlich nur sehr 
"unhandlich" verwendet werden. Im Notfall ginge allerdings auch das. 
Natürlich nur sehr ineffizient, weswegen man eine solche Verwendung 
vermeiden oder zumindest auf eben auf den "Notfall" beschränken wird...

Der zweite Teil der Aussage ist allerdings komplett falsch. Natürlich 
kann man diese Register direkt und gezielt verändern. Wäre es anders, 
könnte seit 40 Jahren praktisch keine PC-Software mehr laufen.

Also: führe das ominöse Buch der einzigen Bestimmung zu, für die es 
geeignet ist: wische dir mit seinen Seiten den Arsch ab. Allerdings 
wirst du vermutlich feststellen, dass es auch für diesen Zweck noch 
besser geeignetes Material gibt...

Autor: guest (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Kritical R. schrieb:
> und :IP wird dann wohl die
> eingestellte adresse sein

IP kommt von 'instruction pointer', aber Du kannst ja eh kein Englisch.

c-hater schrieb:
> Welches Buch ist das denn nun genau? Weil: Es taugt ganz offensichtlich
> nix...

Hat er doch oben als erstes verlinkt: 
https://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren

c-hater schrieb:
> Der zweite Teil der Aussage ist allerdings komplett falsch. Natürlich
> kann man diese Register direkt und gezielt verändern.

So ganz falsch ist das nicht. Das "direkt verändert" bezieht sich wohl 
auf den nicht vorhandenen OpCode für ein "mov Sreg, imm16". Man kann 
also keine Werte direkt in ein Segmentregister laden, nur aus einen 
anderen Register oder von einer Speicheradresse.

Autor: Ben B. (Firma: Funkenflug Industries) (stromkraft)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Man kann auch dreckigen Code verwenden, sinnbildlich für 16 Bit 
DOS-Programme und vernachlässigter Reihenfolge der Register (das ist zu 
lange her, welches zuerst, welches zuletzt weiß ich nicht mehr).

push cs
push ip
pushf
iret

Oder ein jmp far kann auch direkt in das CS-Register schreiben.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
c-hater schrieb:
>> Man kann sie nur dafür nutzen; sie können weder als allgemeine
>> Register benutzt,
>> noch direkt verändert werden.
>
> Davon stimmt bestenfalls nur die erste Hälfte der Aussage. Ja: als
> allgemeine Register können die Segemntregister tatsächlich nur sehr
> "unhandlich" verwendet werden. Im Notfall ginge allerdings auch das.
> Natürlich nur sehr ineffizient, weswegen man eine solche Verwendung
> vermeiden oder zumindest auf eben auf den "Notfall" beschränken wird...
>
> Der zweite Teil der Aussage ist allerdings komplett falsch. Natürlich
> kann man diese Register direkt und gezielt verändern.

Nein. Man muss den gewünschten Wert erst in ein reguläres Register laden 
und dann von dort ins Segmentregister kopieren. Alternativ geht auch der 
Umweg über den Stack per PUSH/POP.

Autor: Carl D. (jcw2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
egbert schrieb:
> Effektive Adresse im "Real Mode" = (CS << 4) | IP

Nicht "|" oder, sondern "+" plus:

20-Bit-Adresse = (CS << 4) + IP

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.