; nasm -f elf64 bubble.asm && gcc bubble.o -o bubble && ./bubble
extern printf
section .text
global main
main:
call printStr
call sortStr
call printStr
mov eax,1
syscall
ret
printStr:
enter 64, 0
push rbx
push rcx
push rdi
push rsi
push rax
mov rdx, rcx
mov rdi, fmt
mov rsi, msg
mov rax, 0
call printf
pop rax
pop rsi
pop rdi
pop rcx
pop rbx
leave
ret
sortStr:
enter 64, 0
mov rbx, msg
mov rsi, 0
mov rdi, 40
do:
call printStr
xor rcx,rcx
xor rsi,rsi
for:
mov al, [rbx+rsi]
mov ah, [rbx+rsi+1]
cmp al,ah
jb skip
mov dl,al
mov al,ah
mov ah,dl
mov [rbx+rsi], ax
mov rcx, 1
skip:
inc rsi
cmp rsi,12
jb for
cmp rdi,0
je exit
dec rdi
cmp rcx,1
je do
exit:
leave
ret
section .data
msg db 'Hello, world!',0
fmt db '%s%d',10,0