section .text global min global minu global max global maxu global islower global isupper global tolower global toupper ;----- 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