home *** CD-ROM | disk | FTP | other *** search
- ; Assembler-Funktion für das SMALL-Speichermodell,
- ; die von C aus aufgerufen werden kann,
- ; zählt die die Zeilen und Zeichen in einem ASCIIZ-String
- ;
- ; Prototyp:
- ; extern unsigned int ZeilenZaehlen ( char * near String,
- ; unsigned int near * AnzahlZeichen ) ;
- ;
- ; Eingabewerte:
- ; char near * String:
- ; Zeiger auf String, der abgezählt werden soll
- ; unsigned int near * AnzahlZeichen:
- ; Zeiger auf Anzahl der Zeichen
- ;
- ; Ergebnis:
- ; unsigned int: Anzahl der Zeichen
- ;
- NEUEZEILE EQU 0Ah
- DOSSEG
- .MODEL SMALL
- .Code
- PUBLIC _ZeilenZaehlen
- _ZeilenZaehlen PROC
- push bp
- mov bp,sp
- push si ; Registervariable retten
- mov si,[bp+4] ; SI als Zeiger auf den String
- sub cx,cx ; ZeichenZaehler auf 0 setzen
- mov dx,cx ; Zeilenzähler auf 0 setzen
- ZaehlSchleife:
- lodsb ; Nächstes Zeichen laden
- and al,al ; Stringende?
- jz EndeDerZaehlerei ; Ja, fertig
- inc cx ; Nein nächstes Zeichen
- cmp al,NEUEZEILE ; Neue Zeile?
- jnz ZaehlSchleife ; Nein, nächstes Zeichen
- inc dx ; Ja, nächste Zeile
- jmp ZaehlSchleife
- EndeDerZaehlerei:
- inc dx ; Letzte Zeile mitzählen
- mov bx,[bp+6] ; Ergebnis der Anzahl an Zeichen
- mov [bx],cx
- mov ax,dx ; Zeilenanzahl zurückgeben
- pop si ; Registervariable
- ; wiederherstellen
- pop bp
- ret
- _ZeilenZaehlen ENDP
- END
-