segment .bss set resq 10 segment .text global main main: push rbp mov rbp, rsp sub rsp, 32 ; shadow registers bts qword [set], 4 ; set bit 4 of set bts qword [set], 7 ; set bit 7 of set bts qword [set], 8 ; set bit 8 of set bts qword [set+8], 12 ; set bit 76 of set mov rax, 76 ; test bits 4, 76, 77 mov rbx, rax ; copy bit number to rbx shr rbx, 6 ; qword number of set to test mov rcx, rax ; copy bit number to rcx and rcx, 0x3f ; extract rightmost 6 bits xor edx, edx ; set rdx to 0 bt [set+8*rbx], rcx ; test bit setc dl ; edx equals the tested bit bts [set+8*rbx], rcx ; set the bit, insert into set btr [set+8*rbx], rcx ; clear the bit, remove xor rax, rax leave ret