Hola!
Ich will das folgende kleine Programm etwas modifizieren -
Funktion des Programms: öffnet eine Datei sucht nach nem String und gibt die Anzahl an wie oft der String gefunden wurde.
Und zwar will ich die Datei in der gesucht werden soll und den String der gesucht werden soll am DOS-Prompt angeben und nicht wie im unteren Code - hier ist die Datei und der String schon im Quellcode verankert
filename db 'Kapitel1.txt',0h
string db 'der'
kann mir da einer weiterhelfen?
Code
.model tiny ;nur ein kleines Programm
.code ;hier steht der code
org 100h ;wir basteln ne COM Datei
START: ;Label zum verzieren
mov ah, 3dh ;"ffnen der autoexec.bat
xor al, al ;nur zum lesen..
lea dx, filename ;dx zeigt auf den Dateinamen
int 21h
jc Ende ;wenn es irgendwelche Fehler gibt beenden wir..
mov bx, ax ;speichern des Handels
mov ax, 4202h ;gehe zum Ende der Datei..
xor cx, cx ;cx = dx = 0
xor dx, dx
int 21h
push ax ;ax ist die L"nge des Dateiinhaltes, wenn
;sie kleiner als 64kb ist.. ;)
;der Rest steht in DX
mov ax, 4200h ;gehe zum anfang der Datei
xor cx,cx ;CX=DX=0
xor dx,dx
int 21h
mov ah, 3fh ;lesen der gesamten Datei
pop cx ;in den Buffer
push cx ;speicher die Dateil"nge wieder im Stack
lea dx, buffer
int 21h
mov ah, 3eh ;die Datei wird geschlossen
int 21h
mov dx, 0h ;Setze dx als Z"hler auf 0
lea di, buffer ;hier fangen wir an zu suchen
SearchOn:
pop cx ;Dateil"nge in cx
lea si, string ;was wollen wir finden ?
lodsb ;lade das erste Byte in ax
repnz scasb ;Suche starten
cmp cx,0 ;wenn cx=0 dann wurde alles durchsucht..
jz disp ;Ergebnisse anzeigen
push cx
mov cx, laenge ;den Rest des Strings vergleichen
repz cmpsb
cmp cx,0 ;kompletter String gleich ?
jnz SearchOn ;wenn nicht weitersuchen
inc dx ;Z"hler erh"hen
pop cx ;Restliche L"nge ?berpr?fen
push cx
cmp cx, 0
jne SearchOn ;weitersuchen
jmp disp ;anzeigen
disp:
lea di, showstring ;in di ist der String den wir anzeigen wollen
mov ax, dx ;wenn dx < 10 dann wird er umgerechnet in Dezimal
cmp ax, 10d
jnae showit
cmp ax, 100d
jae toogreat
xor dx, dx
mov cl, 10d
div cl
add dl, 48d
mov byte ptr cs:[di], dl
add al, 48d
mov byte ptr cs:[di], al
inc di
showit:
add dl, 48d
mov byte ptr cs:[di], dl
lea dx, showstring ;Anzeigen
mov ah, 9h
int 21h
Ende:
mov ah, 4ch ;Beenden..
int 21h
toogreat: ;Zahl ist gr" er als 9
lea dx, toogre
mov ah, 9h
int 21h
jmp Ende
filename db 'Kapitel1.txt',0h
string db 'der'
laenge equ $-offset string
toogre db 'String "fters als 9 mal gefunden',10d,13d,'$'
showstring db ' ',10d,13d,'$'
buffer:
END START ;hier ist das ganze zuende..
Alles anzeigen