Ein paar Assembler Fragen

bigb702

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
283
Hallo!

Ich muß meinem Lehrer am Montag mein Assembler-Bootloader erklären, den ich vor n 3/4 Jahr geschreiben habe. Nur bin ich seit dem sehr raus aus dem Thema und weiß nicht mehr alles. Daher ein paar Fragen.

Kann mir jemand detailiert sagen, was dieser Befehl macht?

mov byte [es:di], '#'

Im Endeffekt sehe ich auf dem Bildschirm die Raute, aber was macht byte und [es:di] . In es habe ich das Grafikregister 0xb800 geschrieben.

Am Ende von einem Assembler-Programm steht ja immer

db 0x55
db 0xAA


Was beteutet das nochmal?

Thx und schönes WE
 
Hi!

"es" ist ein Segmentregister (ExtraSegment) und "di" ein weiteres Register (DestinationIndex). Aus diesen beiden Registern wird durch den Ausdruck es:di ein Zeiger in den Speicher gebildet. "byte" bedeutet lediglich das ein Byte geschrieben werden soll an die Addresse, da das Raute-Zeichen, wie alle ASCII Symbole ein Byte lang ist.
 
Hi,

db 0x55
db 0xAA

Was bedeutet das nochmal?

Das ist die MBR-Signatur. Das BIOS überprüft damit ob es sich um einen gültigen MBR handelt.

Die 2 Sign.-Bytes sind die letzten 2 des Sektors(512 Byte):

Code:
org 01feh
dw 0AA55h
 
bigb702 schrieb:
mov byte [es:di], '#'

Im Endeffekt sehe ich auf dem Bildschirm die Raute, aber was macht byte und [es:di] . In es habe ich das Grafikregister 0xb800 geschrieben.
Du sagst es doch schon, 0xb800 ist das Segment für die Bildschirmausgabe in Textmodi (0xa000 für Grafikmodi). Das bedeutet letztendlich nichts anderes, dass du das Zeichen '#' in den Speicher schreibst, welcher auf dem Bildschirm ausgegeben wird.
 
b800 und a000 kann man denn überhaupt noch schreibend auf diese Speicherbereiche zugreifen unter modernen Betriebssystemen? Als ich das letzte Mal solche Spielereien benutzt hatte gab es noch nicht mal Win95. Damals war das kein Problem. Nur wie sieht es heute aus? Unter Vista z.B.

hmmm sehe gerade, dass das ja vor dem eigentlichen Betriebssystemstart ausgeführt werden soll - also waren meine Bedenken unnötig.^^
 
Und es geht auch noch unter Windows. Diese werden ja in der NTVDM ausgeführt. Das Schreiben in den Speicherbereich sieht man allerdings glaube nur, wenn man die DOS-Box auf Vollbild schaltet.
 
CoolHandLuke schrieb:
hmmm sehe gerade, dass das ja vor dem eigentlichen Betriebssystemstart ausgeführt werden soll - also waren meine Bedenken unnötig.^^
So ist das. Der Bootloader wird im Real Mode gestartet. Dort wird praktisch 16 Bit physisch adressiert. Erst anschliessend wird in den Protected bzw Long Mode geswitched, wo dann die virtuelle Speicherverwaltung greift. Aber selbst dort kann man noch auf diese Speicherbereiche zugreifen. Kommt ganz darauf an, wie die Deskriptoren für die Segment Register eingestellt wurden.
 
deine geschichte hört sich irgendwie schräg an.. versuchst du da nich dem lehrer was unterzujubeln, das gar nich auf deinen mist gewachsen ist?
 
Zurück
Oben