Advertisement
Guest User

p33

a guest
Oct 27th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "asm64_io.inc"
  2. segment .data
  3. ;
  4. ; dane zainicjalizowane
  5. ;
  6. liczba_str db "2511", 0
  7. liczba_int dd 3324123
  8.  
  9. segment .bss
  10. ;
  11. ; dane niezainicjalizowane
  12. ;
  13. wynik_str resd 1
  14.  
  15. segment .text
  16.  
  17. global asm_main
  18. asm_main:
  19.     enter 0,0
  20.            
  21.     mov rsi, liczba_str
  22.     call toInt
  23.     call println_int
  24.    
  25.     mov rax, [liczba_int]
  26.     mov rsi, wynik_str
  27.     call toString
  28.     call println_string
  29.  
  30.  
  31. mov rax, 0 ; kod zwracany z funkcji
  32.  
  33. leave
  34. ret
  35.        
  36.  
  37. ; w rax string do inta, wynik w rax
  38. toInt:
  39.     xor rax, rax            ;szybsze zerowanie rejestrow
  40.     xor rcx, rcx            ;counter na 0
  41.     petla_int:
  42.         mov bl, [rsi + rcx] ;wartosc z tablicy
  43.        
  44.         cmp bl, 0           ;jesli nie ma ostatniego jeszcze to ok
  45.         je ending_int
  46.        
  47.         imul ax, 10         ;jesli jest to obecny wynik razy 10
  48.        
  49.         sub bl, '0'         ;rzutujemy to co jest w bl (rbx) na inta
  50.         add al, bl          ;dodajemy do al (rax) inta z bl (rbx)
  51.        
  52.         add rcx, 1          ;dla kolejnych wartosci i fora
  53.         jmp petla_int
  54.        
  55.     ending_int:
  56.         ret
  57.        
  58. ; w rax int do stringa, bufor w rsi
  59. toString:
  60.     add esi, 9             ;int to max 10 wiec przechodzimy na ostatni
  61.     mov edi, 10            ;przez to bedziemy dzielic
  62.    
  63.     petla_str:
  64.         xor rdx, rdx       ;czyszczenie do dzielenia
  65.         div edi
  66.                
  67.         add dl, '0'        ;rzutujemy to co jest w esi na inta
  68.         sub esi, 1         ;wskaznik na element jeden mniej
  69.         mov [esi], dl      ;dodajemy do eax inta z esi
  70.        
  71.         test eax, eax      ;jesli puste to brak liczby
  72.         jnz petla_str      ;jesli nie to od poczatku
  73.        
  74.     ending_str:
  75.         mov rax, rsi
  76.         ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement