Untitled
unknown
assembly_x86
2 years ago
1.3 kB
3
Indexable
section .text global _start _start: mov rbx, tekst mov rax, rbx ; ten sam adres w rbx oraz w rax ; oba rejestry teraz sa w tym samym rejonie pamieci nextchar: cmp qword [rax], 0 ; porownaj wskaznik adresu rax z wystapieniem zera (zero jest koncem ciagu znakow) jz finished ; skocz do etykiety finished jesli zostalo ustawione zero dla flagi ZF (zero flag) ; jesli nie to kontynuuj dalej obliczanie inc rax ; inkrementuj jmp nextchar ; skocz pod etykiete nextchar finished: sub rax, rbx ; arytmetyka wskaznikow, odejmujemy, obliczamy roznice miedzy adresem ; rax a adresem rbx, rax jest teraz starszym adresem od rbx ; rbx ma zachowany adres poczatku napisu tekst ; natomiast rax zostal zwiekszany o 1 w nextchar ; w rezultacie otrzymalismy dlugosc napisu by prawidlowo go wyswietlic ; wynik jest przechowywany w rax mov rbx, rax ; przerzucam wynik rax, do rbx zeby wynik ; z rax nie zostal nadpisany w funkcji sys_write ; wywolanie funkcji systemowej sys_write mov rax, 1 ; wywolanie funkcji systemowej sys_write mov rdi, 1 ; wywolanie deskryptora poliku: 1 oznacza ekran mov rsi, tekst ; nasz tekst do wyswietlenia mov rdx, rbx syscall mov rax, 60 syscall section .data tekst db "To jest tekst", 0ah
Editor is loading...