home *** CD-ROM | disk | FTP | other *** search
- ; Assembler-Funktion für das LARGE-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 * far String,
- ; unsigned int far * AnzahlZeichen ) ;
- ;
- ; Eingabewerte:
- ; char far * String:
- ; Zeiger auf String, der abgezählt wird
- ; unsigned int far * AnzahlZeichen:
- ; Zeiger auf Anzahl der Zeichen
- ;
- ; Ergebnis:
- ; unsigned int: Anzahl der Zeichen
- ;
- NEUEZEILE EQU 0Ah
- DOSSEG
- .MODEL LARGE
- .Code
- PUBLIC _ZeilenZaehlen
- _ZeilenZaehlen PROC
- push bp
- mov bp,sp
- push si ; Registervariable retten
- push ds ; Datensegment retten
- lds si,[bp+6] ; 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
- les bx,[bp+10] ; Ergebnis für Zeichenzahl
- ; abspeichern
- mov es:[bx],cx
- mov ax,dx ; Zeilenanzahl als Funktionswert
- ; zurückgeben
- pop ds ; Datensegment wiederherstellen
- pop si ; Registervariable
- ; wiederherstellen
- pop bp
- ret
- _ZeilenZaehlen ENDP
- END
-