home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / tasm / chapxmpl.arc / ZAEHLEN.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-10-09  |  1.3 KB  |  50 lines

  1. ; Assembler-Funktion für das SMALL-Speichermodell,
  2. ; die von C aus aufgerufen werden kann,
  3. ; zählt die die Zeilen und Zeichen in einem ASCIIZ-String
  4. ;
  5. ; Prototyp:
  6. ;    extern     unsigned int ZeilenZaehlen ( char * near String,
  7. ;            unsigned int near * AnzahlZeichen ) ;
  8. ;
  9. ;    Eingabewerte:
  10. ;        char near * String:
  11. ;            Zeiger auf String, der abgezählt werden soll
  12. ;        unsigned int near * AnzahlZeichen:
  13. ;             Zeiger auf Anzahl der Zeichen
  14. ;
  15. ;    Ergebnis:
  16. ;        unsigned int: Anzahl der Zeichen
  17. ;
  18. NEUEZEILE    EQU    0Ah
  19.         DOSSEG
  20.         .MODEL    SMALL
  21.         .Code
  22.         PUBLIC    _ZeilenZaehlen
  23. _ZeilenZaehlen    PROC
  24.         push    bp
  25.         mov    bp,sp
  26.         push    si                ; Registervariable retten
  27.         mov    si,[bp+4]            ; SI als Zeiger auf den String
  28.         sub    cx,cx            ; ZeichenZaehler auf 0 setzen
  29.         mov    dx,cx            ; Zeilenzähler auf 0 setzen
  30. ZaehlSchleife:
  31.         lodsb                ; Nächstes Zeichen laden
  32.         and    al,al            ; Stringende?
  33.         jz    EndeDerZaehlerei        ; Ja, fertig
  34.         inc    cx                ; Nein nächstes Zeichen
  35.         cmp    al,NEUEZEILE        ; Neue Zeile?
  36.         jnz    ZaehlSchleife        ; Nein, nächstes Zeichen
  37.         inc    dx                ; Ja, nächste Zeile
  38.         jmp    ZaehlSchleife
  39. EndeDerZaehlerei:
  40.         inc    dx                ; Letzte Zeile mitzählen
  41.         mov    bx,[bp+6]            ; Ergebnis der Anzahl an Zeichen
  42.         mov    [bx],cx
  43.         mov    ax,dx            ; Zeilenanzahl zurückgeben
  44.         pop    si                ; Registervariable
  45.                             ; wiederherstellen
  46.         pop    bp
  47.         ret
  48. _ZeilenZaehlen    ENDP
  49.         END
  50.