Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "asm64_io.inc"
- segment .data
- ;
- ; dane zainicjalizowane
- ;
- liczba_str db "2511", 0
- liczba_int dd 3324123
- segment .bss
- ;
- ; dane niezainicjalizowane
- ;
- wynik_str resd 1
- segment .text
- global asm_main
- asm_main:
- enter 0,0
- mov rsi, liczba_str
- call toInt
- call println_int
- mov rax, [liczba_int]
- mov rsi, wynik_str
- call toString
- call println_string
- mov rax, 0 ; kod zwracany z funkcji
- leave
- ret
- ; w rax string do inta, wynik w rax
- toInt:
- xor rax, rax ;szybsze zerowanie rejestrow
- xor rcx, rcx ;counter na 0
- petla_int:
- mov bl, [rsi + rcx] ;wartosc z tablicy
- cmp bl, 0 ;jesli nie ma ostatniego jeszcze to ok
- je ending_int
- imul ax, 10 ;jesli jest to obecny wynik razy 10
- sub bl, '0' ;rzutujemy to co jest w bl (rbx) na inta
- add al, bl ;dodajemy do al (rax) inta z bl (rbx)
- add rcx, 1 ;dla kolejnych wartosci i fora
- jmp petla_int
- ending_int:
- ret
- ; w rax int do stringa, bufor w rsi
- toString:
- add esi, 9 ;int to max 10 wiec przechodzimy na ostatni
- mov edi, 10 ;przez to bedziemy dzielic
- petla_str:
- xor rdx, rdx ;czyszczenie do dzielenia
- div edi
- add dl, '0' ;rzutujemy to co jest w esi na inta
- sub esi, 1 ;wskaznik na element jeden mniej
- mov [esi], dl ;dodajemy do eax inta z esi
- test eax, eax ;jesli puste to brak liczby
- jnz petla_str ;jesli nie to od poczatku
- ending_str:
- mov rax, rsi
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement