products/Sources/formale Sprachen/MASM image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: modul.asm   Sprache: Masm

         .MODEL Small
         .286

  .DATA
Puffer   STRUC           ;Puffer für Numin
    Max  DB 6
    Anz  DB ?
    Txt  DB 6 DUP (?)
Puffer   ENDS
Buffer   Puffer <>       ;Speicher für Puffer

Puffer1  DB 6 DUP (?)    ;Puffer für Ausgabeproz.

         .CODE
public   Ausgabe, NumIn ;zwei öffentliche Prozeduren

Ausgabe  PROC FAR       ;Ausgabeprozedur Typ: FAR
         pusha          ;Register sichern
         xor  cx,cx     ;CX=0=Zeichenzähler
         mov  di,OFFSET Puffer1+6  ;DI an Pufferende
         mov  bx,10     ;Nachher durch 10 dividieren

Loop1:   xor  dx,dx     ;DX=0
         div  bx        ;AX/10, Rest in DX bzw. DL
         add  dl,30h    ;DL nach ASCII
         dec  di        ;DI-1
         mov  [di],dl   ;ASCII Ziffer in Puffer
         inc  cx        ;CX+1
         cmp  ax,0      ;Ist AX=0 ?
         jne  Loop1     ;Springe wenn nein

         mov  ah,40h    ;Funktionsnummer
         mov  bx,1      ;Handle-Nummer
         mov  dx,di     ;DS:DX auf String!
         int  21h       ;ASCII-Zahl ausgeben!
         popa           ;Register wiederherstellen
         ret            ;und zurück!
Ausgabe  ENDP           ;Ende Prozedur


NumIn    PROC FAR      ;Eingabeproz. Typ: FAR
         push ax bx dx si di   ;geht nur bei TASM
         mov  dx,OFFSET Buffer
         mov  ah,0Ah
         int  21h        ;Zahlenstring einlesen
         xor  cx,cx      ;CX=0
         mov  cl,Buffer.Anz
         mov  si,cx
         mov  bx,OFFSET Buffer+1
         add  bl,Buffer.Anz ;Ende des Zahlenstrings
         adc  bh,0       ;Falls Überlauf
         mov  di,1       ;DI=1=Faktor f. Ziffer
         xor  cx,cx      ;CX=0
         cmp  Buffer.Anz,0 ;Gar keine Eingabe?
         je   NullZ

LoopA:   mov  al,[bx]    ;Ziffer bei BX nach AX
         xor  ah,ah      ;AH=0
         sub  ax,30h     ;ASCII nach BIN
         mul  di         ;AX*DI=DX:AX DX immer 0
         jc   NullZ      ;Überlauf, Zahl zu groß
         add  cx,ax      ;CX=CX+AX
         mov  ax,di      ;AX=DI
         mov  di,10      ;di=10
         mul  di         ;AX*DI=DX:AX DX immer 0
         mov  di,ax      ;DI=AX, DI ist Faktor! 
         clc             ;Lösche CF0
         dec  bx         ;BX-1 
         dec  si         ;SI-1
         jnz  LoopA      ;SI = 0 ?
NullZ:   pop  di si dx bx ax ;Nur bei TASM
         ret             ;Zurück zum Hauptprog.
Numin    ENDP            ;Ende der Proz.

         END

¤ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff