extern strclr section .text global min global minu global max global maxu global islower global isupper global tolower global toupper global itoa ;----- min(int a, int b) -----; ; return value: lowest value min: push rbp mov rbp, rsp mov rax, rdi cmp rdi, rsi cmovg rax, rsi leave ret ;----- minu(unsigned int a, unsigned int b) -----; ; return value: lowest value minu: push rbp mov rbp, rsp mov rax, rdi cmp rdi, rsi cmova rax, rsi leave ret ;----- max(int a, int b) -----; ; return value: highest value max: push rbp mov rbp, rsp mov rax, rdi cmp rdi, rsi cmovl rax, rsi leave ret ;----- maxu(unsigned int a, unsigned int b) -----; ; return value: highest value maxu: push rbp mov rbp, rsp mov rax, rdi cmp rdi, rsi cmovb rax, rsi leave ret ;----- islower(char* c) -----; ; return value: 1 (character is in range of 'a'-'z') or 0 (character is nog in range of 'a'-'z') islower: push rbp mov rbp, rsp xor rax, rax cmp byte [rdi], 'a' jb .quit cmp byte [rdi], 'z' ja .quit mov rax, 1 .quit: leave ret ;----- isupper(char* c) -----; ; return value: 1 (character is in range of 'A'-'Z') or 0 (character is not in range of 'A'-'Z') isupper: push rbp mov rbp, rsp xor rax, rax cmp byte [rdi], 'A' jb .quit cmp byte [rdi], 'Z' ja .quit mov rax, 1 .quit: leave ret ;----- tolower(char* c) -----; ; return value: ASCII value. Same as original if it was not an uppercase letter, otherwise lowercase letter tolower: push rbp mov rbp, rsp call isupper mov rcx, rax mov al, byte [rdi] cmp rcx, 1 jne .quit add al, 32 .quit: leave ret ;----- toupper(char* c) -----; ; return value: ASCII value. Same as original if it was not a lowercase letter, otherwise uppercase letter toupper: push rbp mov rbp, rsp call islower mov rcx, rax mov al, byte [rdi] cmp rcx, 1 jne .quit sub al, 32 .quit: leave ret ;----- itoa(int num, char* str) -----; ; return value: pointer to str itoa: push rbp mov rbp, rsp push rsi push rdi mov rdi, rsi call strclr pop rdi mov rax, rdi mov r8, rsi xor rcx, rcx test rax, rax jnz .checkNeg mov byte [rsi], '0' mov byte [rsi+1], 0 jmp .quit .checkNeg: xor rbx, rbx test rax, rax jns .convert neg rax mov rbx, 1 .convert: xor rdx, rdx mov r10, 10 div r10 add rdx, '0' push rdx inc rcx test rax, rax jnz .convert test rbx, rbx jz .toString push byte '-' inc rcx .toString: pop rdx mov byte [rsi], dl inc rsi loop .toString mov byte [rsi], 0 .quit: pop rax leave ret