title image


Smiley Re: Assembler
2.

Lesen Sie mit Hilfe eines Programms den Bootsektor einer Diskette in einen im Programm vereinbarten Puffer. Am Bildschirm ist auszugeben, ob es sich um die DOS-Version 5.0 oder nicht handelt.

Falls ein Lesefehler auftritt, muss das Programm definiert enden, zuvor ist eine Fehlermeldung am Bildschirm anzuzeigen.

Sollte kein Fehler auftreten, dann ist der Inhalt des Bootblocks mit 32 Zeichen/Zeile auf dem Bildschirm auszugeben.

Die nicht druckbaren Zeichen sind dabei durch '.' zu ersetzen.



Vorgehensweise:



Die Service-Routinen des BIOS für die Diskette/Festplatte werden über den BIOS-Interrupt 13h angesprochen.

Hierbei wird, wie beim DOS-Interrupt 21h, im Register AH die Funktionsnummer übergeben.



Die hier geforderte Lesefunktion benötigt folgende Eingangsparameter:



AH Funktionsnummer (Lesen = 02)

AL Anzahl der zu lesenden Sektoren

ES:BX Adresse des Datenpuffers des Anwenderprogramms

CH Nummer der Spur

CL Nummer des Sektors

DH Nummer der Seite

DL Nummer des Laufwerkes



Falls ein Lesefehler aufgetreten ist, so ist CF=1, ansonsten CF=0. Das Carryflag soll per Programm ausgewertet werden.



Der Boot-Sektor einer Diskette befindet sich an der physischen (!) Position: Seite=0, Spur=0, Sektor=1.



Mein Programm:



.MODEL SMALL

.STACK 100h

.DATA

Puffer DB 512 DUP (?) ; Puffergröße wird mit 512 Byte festgelegt,

; da ein Block 512 Byte

Fehl DB 'Diskettenfehler', 13, 10, '$'

NL DB 13, 10, '$'



.CODE

Start:

mov ax, @data

mov ds, ax ; ax wird nach ds geschrieben

mov es, ax ; ax wird nach es geschrieben, da ES:BX



mov dl, 00h ; Nummer des Laufwerkes (0)

mov dh, 00 ; Nummer der Seite (0 weil Seite 0)

mov cl, 01 ; Nummer des Sektors (Sektor 1)

mov ch, 00 ; Nummer der Spur (Spur 0)

mov al, 01 ; Anzahl der zu lesenden Sektoren (nur 1 Sektor)

mov ah, 02 ; Funktionsnummer (02 = lesen)

int 13h ; Interrupt für BIOS

jc Fehler



mov si, OFFSET Puffer

mov bx, 0

M2: mov cx, 32

M1: mov ah, 02

mov dl, [si]

int 21h

inc si

dec cx

jnz M1



mov dx, OFFSET NL ; neue Zeile

mov ah, 09

int 21h



add bx, 32 ; ???

cmp bx, 512 ; ???

je Ende

jmp M2



Fehler:

mov dx, OFFSET Fehl

mov ah, 09

int 21h



Ende: mov ax, 4c00h

int 21h



END Start



Ich hab vor allem meine Probleme mit den 32 Zeichen pro Zeile. Könnte das so funktionieren? Oder die 512 herunterzählen. Da müssen ja zwei Zählschleifen verwendet werden: Eine für die 32, die andere für die 512.

Und dann die nicht druckbaren Zeichen durch einen Punkte ersetzen. Welcher Bereich in der ASCII-Tabelle ist das?



Vielen Dank!



MfG Sue

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: