products/Sources/formale Sprachen/MASM image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: HexDec.asm   Sprache: Masm

;Eingabe von HexZahlen, Umwandlung nach BIN, Ausgabe als ASCII DEC.
;by Marcus Roming (c) 2001. 

  .MODEL Small    ;EXE-Datei
         .STACK 100h
         .286            ;wegen pusha+popa
         .DATA       
Msg1     DB "HEX --> DEC. Geben Sie die Hex-Zahl ein: $"
CR_LF    DB 10,13,"$"    ;Anf. nächste Zeile
Puffer1  DB 6 DUP (?)    ;Puffer für Ausgabeproz.
Puffer   STRUC           ;Puffer für Numin
    Max  DB 6
    Anz  DB ?
    Txt  DB 6 DUP (?)
Puffer   ENDS
Buffer   Puffer <>       ;Speicher für Puffer

         .CODE
Start:   mov  ax,@data   ;Datenseg. initialisieren
         mov  ds,ax
         mov  dx,OFFSET Msg1
         mov  ah,09h     
         int  21h        ;Msg1 anzeigen
         call NumIn      ;Nummer eingeben
         jc   Fehler     ;Zahl zu groß
         mov  dx,OFFSET CR_LF
         mov  ah,09h
         int  21h
         mov  ax,cx      ;CX nach AX
         call Ausgabe    ;Nummer ausgeben
Fehler:  mov  ah,4Ch   
         int  21h        ;Prog. beenden

NumIn    PROC NEAR       ;Eingabeproz.
         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

  cmp  ax,96      ;Kleiner Buchstabe?
  jng  Weiter1
  sub  ax,87      ;ASCII nach BIN Buchstabe!
  jmp  Fertig

Weiter1:
  cmp  ax,64      ;Großer Buchstabe?
  jng  Weiter2
  sub  ax,55      ;ASCII nach BIN Buchstabe!
  jmp  Fertig


Weiter2:
  sub  ax,30h     ;ASCII nach BIN Zahl!
Fertig:
         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,16      ;di=16
         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.

Ausgabe  PROC NEAR      ;Ausgabeprozedur
         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
         END            ;Ende Programm

         END Start       ;Ende des Programms+


¤ Dauer der Verarbeitung: 0.4 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