PC ohne Betriebssystem rudimentär kontrollieren

Software für PC wie Open Office, Antvirenprogramme, Firewalls usw. Programmiersprachen wie Visual Basic, Pascal, C++.

Software für PC wie Open Office, Antvirenprogramme, Firewalls usw. Programmiersprachen wie Visual Basic, Pascal, C++.

Moderator: Moderatorengruppe

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 18:00

So, ich hab jetzt mal mit folgenden Code ein Disketten-Image gemacht(mit NASM), und es funktioniert auch.
Code: Alles auswählen
[BITS 16]
[ORG 0x0000]

mov   ah,0x09      ; Es wird ein ASCII-
mov   al,'A'       ; Zeichen(A), einmal
mov   bh,0         ; in grün,an die
mov   bl,0x02      ; momentane Cursor-
mov   cx,1         ; position geschrieben.
int   0x10         ;

mov   ah,0x00      ; Warten bis eine Taste
int   0x16         ; gedrückt wird und
int   0x19         ; dann neustarten.


    Ein kleines Edit:
    Code: Alles auswählen
    MOV AH,00H
    INT 19H
    startet nicht wirklich neu, sondern versucht die Daten erneut vom Floppy zu laden. Wenn dieses noch da ist, ist es natürlich in diesem speziellen Fall fast wie ein Neustart.
    Andernfalls aber, wenn die Diskette herausgenommen wurde, wird (zumindest bei mir) das nächste Medium der Bootreihenfolge nach einem gültigen Bootsektor abgesucht.-Die Anweisung führt also nicht wirklich einen Neustart durch.


Nur, das sollte es doch eigentlich garnicht, weil doch die Bootsignatur am Ende fehlt.
Ist es möglich, dass da mein BIOS einfach etwas tolerant ist, oder wie so funktioniert das?

Ich hab mir nun auch mal die Diskette mit einem Hex-Editor angesehen. Frage: Von wo kommen die beiden Nullen(-->Anhang; die betreffenden Nulle sind markiert)
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Master-Jimmy am Freitag 20. April 2007, 21:53, insgesamt 1-mal geändert.
Benutzeravatar
Master-Jimmy
Threadstarter
26173
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Martin67 am Freitag 20. April 2007, 21:02

Hallo,

Edit:
die Nullen kommen von Deinem mov-Befehl: mov bx,1. Da Du hier ein 16bit Register ansprichst, wird auch eine 16bit breite Zahl benötigt. In Deinem Fall 0001h.

Dass das ganze ohne 55AA (Bootsignatur) am Ende funktioniert ist seltsam. Des weiteren wundert es mich, dass Du Programmcode an Stellen hast, wo normalerweise die Disk-Daten stehen.
Z.B. Sektoranzahl, Sektors pro Cluster, Fattype, VolumeID....
Auf jeden Fall müsste so die Diskette von Dos oder Windows nicht lesbar sein. Ich denke, dass hier das Format an gemeckert wird :D

Wie zurückliegend @anders bereits geschrieben hat, muss dieser Disk-Parameterblock (Größe 60Byte) mit einem Jmp-Befehl übersprungen werden. Ich würde Dir raten, den Block gleich in Deinem Assemblerprogramm anzulegen.

Gruß

Martin
Zuletzt geändert von Martin67 am Freitag 20. April 2007, 21:07, insgesamt 2-mal geändert.
Martin67
26176
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 21:05

Natülich kann Windows die Diskette nicht lesen.
Das ist aber auch nicht nötig.-Das steht ja eh nicht zur Verfügung.
Benutzeravatar
Master-Jimmy
Threadstarter
26177
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 21:09

Das das nicht gerade "hübsch" ist, geht mir schon in den Schädel...

Was mich aber ernsthaft interressiert, ist die Tatsache, dass ich ohne Bootsignatur von dieser Diskette booten kann.
Und diese zwei Nulle sind auch immer noch "Magic" :)
Benutzeravatar
Master-Jimmy
Threadstarter
26178
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Martin67 am Freitag 20. April 2007, 21:11

Master-Jimmy hat geschrieben:Natülich kann Windows die Diskette nicht lesen.
Das ist aber auch nicht nötig.-Das steht ja eh nicht zur Verfügung.


Ok Ok, ist ja gut!

Dann ist es halt eine unlesbare Bootdiskette!

Deine Nullen kommen von mov BX, xxxx Du schreibst halt nur ne eins in ein 16bit Register, aber es werden 16 bit reserviert, denn ins BX geht ja auch FFFF. Jetzt klar?

Habe dazu meinen Beitrag oben bereits korrigiert!
Zuletzt geändert von Martin67 am Freitag 20. April 2007, 21:14, insgesamt 1-mal geändert.
Martin67
26179
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 21:14

Das mit den Nullen ist jetzt geklärt, auch wenn ich CX verwende und nicht BX :wink:
Danke!

Bleibt noch die Bootsignatur magisch für den Moment, oder wer "entzaubert" das Problem?
Benutzeravatar
Master-Jimmy
Threadstarter
26180
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Martin67 am Freitag 20. April 2007, 21:21

Master-Jimmy hat geschrieben:Das mit den Nullen ist jetzt geklärt, auch wenn ich CX verwende und nicht BX :wink:
Danke!

Bleibt noch die Bootsignatur magisch für den Moment, oder wer "entzaubert" das Problem?


Ja, CX, nicht BX. Habe mich verhaspelt! :D
Aber bleibt das gleiche.

Kann mir das mit der Bootsignatur nur mit dem BIOS erklären. Vielleicht nimmt es das mit den Bootsektor nicht so genau :roll:

Aber bei anderen BIOS-Erweiterungen, z.B. VGA-BIOS, Network-BIOS, sollte es Dein PC-BIOS genau nehmen, denn sonst werden ja BIOS-Erweiterungen aufgerufen, die es gar nicht gibt.

Gruß

Martin
Martin67
26181
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 21:23

Vielleicht probiert mal jemand ob die Diskette auf seinem PC auch funktioniert.
(Das Image und ein Programm um daraus eine Diskette zu erstellen sind im Anhang)

Kann das sein, dass mein BIOS einfach irgendwie tolerant ist und sozusagen ein Auge zu drückt bezüglich der Bootsignatur???
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Master-Jimmy
Threadstarter
26182
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Martin67 am Freitag 20. April 2007, 21:33

Hallo,

hab ein Problem!

Mein Notebook hat kein Floppy :cry: , aber ich werde es mal auf einen älteren PC testen.

Ach ja, wenn Du dich doch noch entscheidest, einen Datenblock anzulegen!

;Diskettenparameter 1,44MB
OEMname db 'MSDOS5.0' ;8
bytesPerSector dw 0200h ;2
sectPerCluster db 01h ;2
reservedSectors dw 0001h ;2
numFAT db 02h ;1
numRootDirEntries dw 00e0h ;2
numSectors dw 0b40h ;2
mediaType db 0f0h ;1
numFATsectors dw 0009h ;2
sectorsPerTrack dw 0012h ;2
numHeads dw 0002h ;2
numHiddenSectors dd 00000000h ;4
numSectorsHuge dd 00000000h ;4
driveNum db 00h ;1
reserved db 00h ;1
signature db 29h ;1
volumeID dd 5a541826h ;4
volumeLabel db 'NO NAME ' ;11
fileSysType db 'FAT12 ' ;8

Gruß

Martin
Martin67
26183
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 21:41

Äh nochmal zum "Hex-Zeug". Da steht ja
Code: Alles auswählen
B90100
als Entsprechung für
Code: Alles auswählen
MOV CX,1

0x0100 ist aber dezimal 256 und nicht 1

Ist es zu spät für mich, oder was läuft hier...?
Benutzeravatar
Master-Jimmy
Threadstarter
26184
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Martin67 am Samstag 21. April 2007, 04:31

Master-Jimmy hat geschrieben:Äh nochmal zum "Hex-Zeug". Da steht ja
Code: Alles auswählen
B90100
als Entsprechung für
Code: Alles auswählen
MOV CX,1

0x0100 ist aber dezimal 256 und nicht 1

Ist es zu spät für mich, oder was läuft hier...?


Nein,

da steht nicht 0x0100, da steht 0x0001. Das B9 steht für mov cx,16bitWert , denke das ist klar. Für den 16bit Wert hast Du eine 1 geschrieben. Also ist doch der 16Bit Wert folgendermaßen aufgebaut: HIBYTE=0 und LOBYTE =1. Der Hexeditor stellt aber zuerst das LOBYTE und dann das HIBYTE dar, denn er zeigt die Bytes in der Reihenfolge, wie sie im Speicher stehen.

Edit: Noch zum INT19

Master-Jimmy hat geschrieben:
    Ein kleines Edit:
    Code: Alles auswählen
    MOV AH,00H
    INT 19H
    startet nicht wirklich neu, sondern versucht die Daten erneut vom Floppy zu laden. Wenn dieses noch da ist, ist es natürlich in diesem speziellen Fall fast wie ein Neustart.
    Andernfalls aber, wenn die Diskette herausgenommen wurde, wird (zumindest bei mir) das nächste Medium der Bootreihenfolge nach einem gültigen Bootsektor abgesucht.-Die Anweisung führt also nicht wirklich einen Neustart durch.


Der INT19-Handler führt den eigentlichen BOOT-Vorgang von einem Medium durch. Er wird beim Start das erste mal vom BIOS selbst aufgerufen, nachdem der POST (Power On Self Test) abgeschlossen ist. Also wenn Du den INT19 aufrufst, wird ein so genannter Warmstart ausgeführt. Dabei werden wieder alle freigegebenen Bootmedien nach gewählter Reihenfolge (z.B. Diskette, CD-Rom, Festplatte...) abgeklappert. Befindet sich aber jetzt plötzlich keine Diskette mehr im Laufwerk, wird beim Abklappern das nächste Bootmedium gewählt. Hier kann schon der Eindruck entstehen, dass der INT19 das nächste Bootmedium wählt, wenn die Diskette entfernt wurde. Dem ist aber nicht so. Auch bei Dir nicht. Es wird lediglich die Sequenz des Bootvorgangs "ohne Hardwarecheck" von neuen gestartet.





Gruß

Martin
Martin67
26185
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Samstag 21. April 2007, 08:10

Nein,

da steht nicht 0x0100, da steht 0x0001. Das B9 steht für mov cx,16bitWert , denke das ist klar. Für den 16bit Wert hast Du eine 1 geschrieben. Also ist doch der 16Bit Wert folgendermaßen aufgebaut: HIBYTE=0 und LOBYTE =1. Der Hexeditor stellt aber zuerst das LOBYTE und dann das HIBYTE dar, denn er zeigt die Bytes in der Reihenfolge, wie sie im Speicher stehen.


Genau so ist es.-Es war in der Tat zu spät... :lol:
Der Speicher wächst ja auch bei den Mikrocontrollern von der Grössten zur kleinsten Adresse.
Benutzeravatar
Master-Jimmy
Threadstarter
26186
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon derguteweka am Samstag 21. April 2007, 09:47

Moin,

Master-Jimmy hat geschrieben:Der Speicher wächst ja auch bei den Mikrocontrollern von der Grössten zur kleinsten Adresse.


Das hat damit nix zu tun. Es hat damit zu tun, dass die x86 Prozessoren Little Endian sind und nicht Big Endian. Auf einem (Big Endian) PPC-System waere der Wert 0x0001 in zwei aufeinanderfolgenden Bytes so gespeichert: 0x00 0x01.
Auf'm PC isses halt grad wieder andersrum :)

Gruss
WK
derguteweka
26187
Moderator
 
Beiträge: 1048
Registriert: Freitag 18. August 2006, 15:47

Test

Neuer Beitragvon gonimax am Samstag 21. April 2007, 17:02

hallo @Master-Jimmy

ohne zu wissen, wofür es gut ist, bzw. ob es schon jemand anderes probiert hat, hab ich das Image & Tool losgelassen:

...auf Diskette zugegriffen, erscheint dann ein grünes A mit darunterliegendem blinkendem Cursor ...ohne weitere Forderung nach einem Commando-Prozessor
gonimax
26190
Platinum Mitglied
 
Beiträge: 665
Registriert: Montag 30. August 2004, 16:53
Postleitzahl: 01936
Land: Germany / Deutschland

Neuer Beitragvon Master-Jimmy am Samstag 21. April 2007, 17:18

Genau das sollte passieren.

Also kann es eher nicht an einer Spezialität meines BIOS liegen.-Werde das dann wohl mal in einem anderen Forum noch nachfragen; ist ja eigentlich nicht so das Softi-Forum hier...
(Ich übrigens eigentlich auch überhaupt nicht, mache Elektroniker. Meine Welt sind auch mehr Transistoren, Opamps und Konsorten :wink: )
Benutzeravatar
Master-Jimmy
Threadstarter
26191
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

VorherigeNächste

Zurück zu Computer Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste