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

  1. ; Assembler-Funktion für das LARGE-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 * far String,
  7. ;            unsigned int far * AnzahlZeichen ) ;
  8. ;
  9. ;    Eingabewerte:
  10. ;        char far * String:
  11. ;                    Zeiger auf String, der abgezählt wird
  12. ;        unsigned int far * 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    LARGE
  21.         .Code
  22.         PUBLIC    _ZeilenZaehlen
  23. _ZeilenZaehlen    PROC
  24.         push    bp
  25.         mov    bp,sp
  26.         push    si                ; Registervariable retten
  27.         push    ds                ; Datensegment retten
  28.         lds    si,[bp+6]            ; SI als Zeiger auf den String
  29.         sub    cx,cx            ; ZeichenZaehler auf 0 setzen
  30.         mov    dx,cx            ; Zeilenzähler auf 0 setzen
  31. ZaehlSchleife:    
  32.         lodsb                ; Nächstes Zeichen laden
  33.         and    al,al            ; Stringende?
  34.         jz    EndeDerZaehlerei        ; Ja, fertig
  35.         inc    cx                ; Nein, nächstes Zeichen
  36.         cmp    al,NEUEZEILE        ; Neue Zeile?
  37.         jnz    ZaehlSchleife        ; Nein, nächstes Zeichen
  38.         inc    dx                ; Ja, nächste Zeile
  39.         jmp    ZaehlSchleife
  40. EndeDerZaehlerei:
  41.         inc    dx                ; Letzte Zeile mitzählen
  42.         les    bx,[bp+10]            ; Ergebnis für Zeichenzahl
  43.                             ; abspeichern
  44.         mov    es:[bx],cx
  45.         mov    ax,dx            ; Zeilenanzahl als Funktionswert
  46.                             ; zurückgeben
  47.         pop    ds                ; Datensegment wiederherstellen
  48.         pop    si                ; Registervariable
  49.                             ; wiederherstellen
  50.         pop    bp
  51.         ret
  52. _ZeilenZaehlen    ENDP
  53.         END
  54.