Wikipedysta:Doles/Programy/Program nr1

Z Wikibooks, biblioteki wolnych podręczników.

Program wyszukujący największą wartość z ciągu liczb, który jest już zaszyty na stałe w kodzie źródłowym. Wyszukana wartość jest zwracana jako kod błędu w rejestrze EBX. Kod źródłowy:

format ELF executable
entry _start

segment readable executable
_start:

	mov edi,data_items ;do EDI załaduj początkowy adres naszego ciągu. Coś jak "&tablica[0]" w C/C++
	mov eax, [edi] ;element spod tego właśnie pierwszego adresu przenieś do rejestru EAX
	mov ebx,eax ;w rejestrze EBX zwracamy jako kod błędu nasz wynik. 
                    ;Przed przebiegiem pętli niech pierwszy element będzie tym szukanym

start_loop:
	cmp eax, 0 ;czy mamy koniec ciągu ? 0 = koniec
	je loop_exit ;jeśli tak to zakończ pętlę i zwróć wartość w EBX
	add edi,4 ;przesuń EDI o 4 bajty dalej ponieważ pracujemy na liczbach DD, czyli czterobajtowych
	mov eax,[edi] ; to na co wskazuje EDI przenieś do EAX
	
	cmp ebx,eax ;porównaj EAX z dotychczasową maksymalną wartością przechowywaną w EBX
	jnc start_loop ;jeśli EAX jest mniejsze to skocz na początek pętli. Trzeba szukać dalej
	mov ebx,eax ;w przeciwnym wypadku należy naszego "maksa" przenieść z EAX do EBX
	jmp start_loop;i skocz na początek pętli (bezwarunkowo). Szukamy dalej aż do 0 w ciągu

loop_exit:
	mov eax,1 ;numer wywołania systemowego Linuksa: sys_exit
	int 80h ; w EBX mamy nasz maksymalny element ciągu
	

segment readable writeable
data_items dd 3,67,34,222,45,75,54,34,44,33,1,11,66,245,0 ;ciąg liczb 32-bitowych, który przeszukujemy

Kod działa ale trzeba go nieco opatrzyć komentarzami oraz przepisać w innych składniach (GAS, NASM, MASM)