; edi - fd clients__append: ; TODO check against client_capacity mov r10, [clients_len] imul r10, client_size add r10, clients mov [r10], edi add qword [clients_len], 1 mov r11, 4 clients__append__write_zeros: cmp r11, 8 jge return mov byte [r10 + r11], 0 add r11, 1 jmp clients__append__write_zeros ; edi - fd clients__search: mov r11, [clients_len] imul r11, client_size add r11, clients mov r10, clients clients__search__loop: cmp r10, r11 jge clients__search__fail mov r8d, [r10] cmp r8d, edi je clients__search__succ add r10, client_size jmp clients__search__loop clients__search__fail: mov r10, -1 clients__search__succ: mov rax, r10 ret ; rdi - address of client within clients array clients__remove: mov r10, [clients_len] cmp r10, 1 jle clients__clear add r10, -1 mov [clients_len], r10 mov r11, r10 imul r11, client_size add r11, clients mov r10, 0 clients__remove__loop: cmp r10, client_size jge return mov r8b, [r11 + r10] mov [rdi + r10], r8b add r10, 1 jmp clients__remove__loop ; rdi - address of client within clients array clients__clear: mov r10, 0 mov [clients_len], r10 ret