daily pastebin goal
1%
SHARE
TWEET

Untitled

a guest Apr 19th, 2018 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. buf:            .space 12
  3.                 .align 2
  4.  
  5. .text
  6. main:                                   # Programmbeginn A4a
  7.         lw      a0, 0x230(zero)         # Auszugebende Zahl laden
  8.         add     a1, zero, buf           # Adresse des Ausgabepuffers
  9.         jal     int2str                 # Unterprogramm aufrufen
  10.                                         # danach steht in a0 die Länge der
  11.                                         # Zeichenkette
  12.  
  13. # String ausgeben
  14.         add     a2, zero, a0            # Länge steht in a0
  15.         add     a0, zero, 1             # stdout
  16.         add     a1, zero, buf           # Adresse des Puffers
  17.         add     a7, zero, 64            # syscall 64: write
  18.         scall
  19.  
  20. # Programm beenden
  21.         add     a0, zero, 0             # exit code 0
  22.         add     a7, zero, 93            # sycall 93: exit
  23.         scall
  24.  
  25. int2str:
  26.         add     t0, zero, 10
  27.         add     t3, zero, 1
  28.         beq     a0, zero, _int2str_max  # Spezialfall: "0" ausgeben
  29.         add     t3, zero, 10            # t3= Maximale Länge der Ausgabe
  30.         lui     t1, 0x3b9ad             # t1= 0x3b9ad000
  31.         add     t1, t1, -0x600          # t1= 0x3b9ad000-0x600=0x3b9aca00
  32.                                         #   = 1000000000 = 10^9
  33.         bltu    t1, a0, _int2str_max    # Alle 10 Stellen ausgeben
  34.  
  35. _int2str_getlen:                        # Anzahl der Stellen ermitteln
  36.         add     t3, t3, -1              # Länge der Ausgabe reduzieren
  37.         div     t1, t1, t0
  38.         bltu    a0, t1, _int2str_getlen
  39.  
  40. _int2str_max:
  41.         add     t2, t3, a1              # t2= Zeiger auf Ende des Puffers
  42.  
  43. _int2str_loop:
  44.         remu    t1, a0, t0
  45.         divu    a0, a0, t0
  46.         add     t1, t1, 48              # Zahl 0-9 in ASCII-Code '0'-'9' umwandeln
  47.         add     t2, t2, -1
  48.         sb      t1, 0(t2)
  49.         blt     a1, t2, _int2str_loop
  50.  
  51.         add     a0, zero, t3            # Länge aus t3 zurückliefern
  52.         ret                             # kehre zum Aufrufer zurück
RAW Paste Data
Top