Diskussion:Maschinensprache i8086/ Bootloader

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Folgendes wurde von der entsprechenden IP-Diskussionsseite hierher verschoben:


Danke für deine Anregung! Ich habe den Text etwas umformuliert, hoffentlich ist es nun verständlicher! -- Klaus 21:19, 27. Aug. 2007 (CEST)

Vielen Dank für die Überarbeitung. Ich konnte den Sinn des Satzes nicht sicher wiederherstellen, und habe einfach die nächstmögliche Aussage formuliert. Der Fehler war ja mehr grammatikalischer Natur... Schließlich lese ich das Buch ja, weil ich mich (noch) nicht so gut auskenne :) Nun ergibt der Satz einen eindeutigen Sinn! Nochmals vielen Dank! (Ach ja, ich habe erwägt eine Diskussion zu starten, habe mich aber für die Änderung entschieden, weil ich mir nicht im klaren bin wie das funktioniert. Scheinbar werden die Autoren auf Änderungen schneller aufmerksam *g*)

Ich war gerade online, deshalb so schnell. Kritisiere bitte weiterhin alles, was du nicht sofort verstehst! -- Klaus 00:12, 28. Aug. 2007 (CEST)
Dein Wunsch ist mir Befehl! Ich muss an dieser Stelle erwähnen, dass dieses Buch, das erste ist, das mir als Assembler-Einsteiger wirklich weiter hilft! Andere Bücher ähnlichen Kalibers greifen wohl immer auf MASM zurück, was ich mich weigern werde zu lernen. Hier wird immerhin NASM verwendet (nicht dass es schlecht wäre) auch wenn ich lieber GAS lernen würde. (GAS versteht ja auch NASM) Also ein ganz dickes Lob und Dankeschön an den/die Autor/en! -- Daniel 00:23, 28. Aug. 2007 (CEST)
Danke für dein Dankeschön, aber: Ich verwende „ganz bewusst“ weder MASM noch NASM noch GAS, sondern wirklich nur das DEBUG-Programm, um niemanden zur Benutzung eines bestimmten Assemblers zu zwingen. Zwanzig bis dreißig Befehle sind auch mit DEBUG noch einigermaßen übersichtlich.
Was vermisst du an meinem Buch? Es ist noch im Entstehen und ich suche noch nach Themen. -- Klaus 00:38, 28. Aug. 2007 (CEST)
Lass mich das Buch noch fertig lesen, dann kann ich dir sagen, wo noch Fragen offen sind. Gibt es denn eine "gescheitere" Möglichkeit dir das mitzuteilen, als diese Benutzerseite? (Eins vielleicht gleich: Ich habe so meine Probleme mit GDB (GNU Debugger) unter Linux. Falls du dich da auskennst, wäre eine kurze Einführung vielleicht sinnvoll) -- Daniel 23:38, 28. Aug. 2007 (CEST)
Ich kenne mich mit Linux wenig aus und mit dem GDB gar nicht. Aber ich weiß genau: Am Ende wird alles zu Maschinencode. Was die gescheitere Möglichkeit der Kommunikation betrifft: Melde dich bitte an. -- Klaus 00:00, 29. Aug. 2007 (CEST)

-- heuler06 11:59, 15. Jan. 2008 (CET)

Relative Adressierung, Anfängerfrage[Bearbeiten]

Im zweiten Block wird nach 0622 gesprungen, müsste da nicht 0022 stehen da DI auf 0600 gesetzt wurde ?

 0631 75EF         JNZ     0622        ; nächsten Eintrag prüfen

Wenn ich den Code mit nasm übersetze und anschliessend mit qemu/gdb laufen lasse stimmen die offsets nach 0625 nicht mehr, CMP BYTE [SI],0x00 beginnt bei 0629 anstatt bei 0627, mache ich da etwas falsch ?

 0627 803C00       CMP     BYTE PTR [SI],00
 asm code für nasm
 MOV	SI,0x07BE
 MOV	BL,0x04
 CMP	BYTE [SI],0x80 
 JZ	0x0035
 CMP	BYTE [SI],0x00
 JNZ	0x0048
 ADD	SI,+0x10
 DEC	BL
 JNZ	0x0022 ; ? DI->0x0600 
 INT	18
 GDB/qemu
 0x61d:	mov    $0x7be,%si
 0x620:	mov    $0x4,%bl
 0x622:	cmpb   $0x80,(%si)
 0x625:	je     0x635
 0x629:	cmpb   $0x0,(%si)
 0x62c:	jne    0x648
 0x630:	add    $0x10,%si
 0x634:	dec    %bl
 0x636:	jne    0x622
 0x63a:	int    $0x12
 disasm ausgabe von hte
 │0000001d bebe07                         mov         si, 07be                  
 │00000020 b304                           mov         bl, 0x4                   
 │00000022 803c80                         cmp         byte ptr [si], 0x80       
 │00000025 0f840c00                       jz          0x35                      
 │00000029 803c00                         cmp         byte ptr [si], 0x0         
 │0000002c 0f851800                       jnz         0x48                       
 │00000030 81c61000                       add         si, 0x10                   
 │00000034 fecb                           dec         bl                         
 │00000036 0f85e8ff                       jnz         0x22                       
 │0000003a cd12                           int         0x12

Cheers, Greg

Das liegt am Disassembler. Wenn wird den Bootloader aus einem Speicherabbild disassemblieren, gibt er die Addressen des Codes zwischen 0x000 und 0x1FF aus, der far jump, und die Prosition, an die der Code geladen wird (0x07C00), wird hierbei ignoriert. Relative Addressen werden anhand der aktuellen (durch den Disassembler angenommenen) Codeadresse in Absolute Addressen umgerechent. Im hier vorgestellten Assemblerabbild scheint derjenige der den Code nach bearbeitet hat, nicht gründlich vorgegangen sein. Und die Addressen nur teilweise korregiert zu haben. --Sannaj 16:07, 3. Dez. 2011 (CET)

komplettes programm zum herunterladen[Bearbeiten]

hi leute,

es wäre klasse wenn hier der komplette Uhrlader zum herunterladen angeboten wird, er ist ja nicht einheitlich. ich hab beispielsweise einen den hier: http://www.chiark.greenend.org.uk/~neilt/mbr/ . (ist anders zeigt z.B. am Anfang MBR an... ich vermute der hier vorgestellte ist der von windows... wäre klasse wenn darauf eingegangen würde und der erste block zum download angeboten werden würde.. Gruß treaki (nicht eingeloggt..)--79.199.124.127 17:56, 23. Jan. 2011 (CET)

Der von Windows scheint wieder ein anderer zu sein. Da ich Linux + GRUB habe, war es ein bisschen schwierig dran zu kommen. Allerdings habe ich zuletzt eine Version gefunden, die mit dem Bereich der nicht von GRUB überschrieben wurde (Byte 0x003 bis Byte 0x05A) übereinstimmt. Wie auch immer, der Bootsektor von Windows hat leichte Unterschiede, z.B. benutzt er retf statt jmp far um an die 0x6xx Adressen zu kommen. --Sannaj 16:26, 3. Dez. 2011 (CET)

eine kleine wiederhohlung[Bearbeiten]

mir ist grad bei lesen aufgefallen, das in folgendem absatz eine wiederhohlung vorkommt, die beim lesen etwas unangenehm ist.

nix schlimmes, aber man wills hier ja möglichst perfekt haben ^^

Wenn das eingelesene Programm von einer Festplatte stammt, ist es komplizierter. Das eingelesene Programm nennt man Master Boot Record (MBR). Der MBR enthält die Partitionstabelle. Erst nach Auswertung der Partitionstabelle steht fest, von welcher Partition anschließend der Bootsektor geladen und gestartet werden muss. Weil das Betriebssystem den Bootsektor ab Adresse 07C00 erwartet, muss dieser Bereich erst freigemacht werden, denn er ist noch durch den MBR belegt. Das Programm im MBR muss zuerst den Speicherbereich 07C00 bis 07DFF freimachen. Deshalb wird der Bereich von 07C00 bis 07DFF (512 Byte) nach 00600 bis 07FF verschoben, und nach dem Verschieben wird dann das Programm ab 0061D fortgesetzt.

den zweiten satz sollte man eigendlich streichen können.

Ich wollt nur nich anon im buch rumpfuschen

greez anon (:-P)

danke, ist korrigiert! -- Klaus 21:10, 26. Jul. 2011 (CEST)