Untitled

 avatar
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...