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

  1. ; Datei <MasBeisp.ASM>
  2. ; Beispielprogramm im MASM-Modus,
  3. ; um eine Zeile in Großbuchstaben umzuwandeln
  4.         TITLE    Beispielprogramm MASM    ; dieser Kommentar 
  5.                             ; erscheint in der Überschrift
  6.         .286
  7. PufferGroesse        =    128        ; Größe der Ein-/Ausgabepuffer
  8.  
  9. DOS        MACRO    intnum
  10.         mov    ah,intnum            ; Funktionsnummer in AH
  11.         int    21h                ; DOS aufrufen
  12.         ENDM
  13.  
  14. Stk        SEGMENT    STACK
  15.         db    100h DUP (?)        ; Stack reservieren
  16. Stk        ENDS
  17.  
  18. Data        SEGMENT    WORD
  19. EingabePuffer    DB    PufferGroesse DUP (?)        ; Eingabepuffer
  20. AusgabePuffer    DB    PufferGroesse DUP (?)        ; Ausgabepuffer
  21. Data        ENDS
  22.  
  23. DGroup    GROUP        Stk, Data    ; Datensegmente 
  24.                             ; zusammmenfassen
  25.  
  26. Code        SEGMENT    WORD
  27.         ASSUME    cs:CODE        ; Aktuelles Code-Segment
  28. Anfang:
  29.         mov    ax,DGROUP            ; Adresse von DGroup
  30.         mov    ds,ax            ; in DS laden
  31.         ASSUME    ds:DGROUP        ; Datensegment nun DGROUP
  32.         mov    dx,OFFSET DGROUP:EingabePuffer    
  33.                             ; DX als Zeiger auf Ausgabepuffer
  34.         xor    bx,bx            ; Standardeingabegerät
  35.         call    ZeileLesen            ; eine Zeile Lesen
  36.         mov    bx,ax            ; Länge in BX laden
  37.         mov    EingabePuffer[bx],0    ; Mit NUL anschließen
  38.         push    ax                ; AX retten
  39.         call    GrossBuchStabe        ; Zeile umwandeln
  40.         pop    cx                ; Anzahl in CX laden
  41.         mov    dx,OFFSET DGroup:AusgabePuffer
  42.                             ; DX als Zeiger auf Eingabepuffer
  43.         mov    bx,1                ; Standardausgabegerät
  44.         DOS    40h                ; DOS-Funktion Datei schreiben
  45.         DOS    4Ch                ; DOS-Funktion Programmende
  46.  
  47. ; Eine Zeile einlesen, DS zeigt auf Puffer, liefert Anzahl in AX
  48. ZeileLesen    PROC    NEAR
  49.         mov    cx,Puffergroesse        ; Puffergröße laden
  50.         DOS    3Fh                ; DOS-Funktion Datei lesen
  51.         and    ax,ax            ; Zero-Flag setzen, falls ein
  52.                             ; Zeichen eingelesen wurde
  53.         ret                    ; Rückkehr zum Programm
  54. ZeileLesen    ENDP
  55.  
  56. ; Zeile in Großbuchstaben umwandeln
  57. GrossBuchStabe    PROC    NEAR
  58.         mov    si,OFFSET DGroup:EingabePuffer
  59.                             ; Si als Zeiger auf Eingabepuffer
  60.         mov    di,0                ; DI initialisieren
  61. @@UmwandelnSchleife:
  62.         cmp    BYTE PTR [si],0        ; Textende?
  63.         je    @@Fertig            ; ja, dann fertig
  64.         mov    al,[si]            ; sonst, nächstes Zeichen
  65.         and    al,NOT 'a' - 'A'        ; Umwandeln in Großbuchstaben
  66.         mov    AusgabePuffer[di],al    ; speichern in Ausgabepuffer
  67.         inc    si                ; Besser mit lodsb, stosb,
  68.         inc    di                ; dies hier ist nur ein Beispiel!
  69.         jmp    @@UmwandelnSchleife    ; Weiter umwandeln
  70. @@Fertig:
  71.         ret
  72. GrossBuchStabe    ENDP                ; Ende der Prozedur
  73. Code        ENDS                    ; Ende des Code-Segments
  74.         END    Anfang            ; Ende des Quelltexts und Startadresse
  75.