daily pastebin goal
25%
SHARE
TWEET

Untitled

a guest Apr 19th, 2018 53 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top