Pentru manipularea precisă a flag-urilor hardware, alocatoarelor de memorie bitmap și structurilor de date de tip bitset, x86_64 oferă instrucțiuni specializate care testează sau caută poziția biților fără a fi nevoie de măști și deplasări manuale succesive.
Testarea și modificarea atomică a biților cu BT, BTS și BTR
section .text
global verifica_si_activeaza
; int verifica_si_activeaza(uint64_t *bitmap, uint64_t bit_index)
verifica_si_activeaza:
; bts: Bit Test and Set
; Copiază bitul de la poziția specificată în Carry Flag (CF), apoi setează bitul la 1:
bts qword [rdi], rsi
; Dacă bitul era deja 1 înainte, CF = 1; dacă era 0, CF = 0:
setc al ; AL = 1 dacă bitul era deja setat, 0 dacă tocmai a fost activat
movzx rax, al
ret
Scanarea biților: BSF (Bit Scan Forward) și BSR (Bit Scan Reverse)
section .text
global index_primul_si_ultimul_bit
; BSF (Bit Scan Forward): Scanează de la bitul 0 spre bitul 63 pentru a găsi primul bit cu valoarea 1
; BSR (Bit Scan Reverse): Scanează de la bitul 63 spre bitul 0 (cel mai semnificativ bit)
exemplu_scanare:
mov rax, 0x0000000000000080 ; Bitul 7 este 1 (128 în zecimal)
bsf rcx, rax ; RCX va primi valoarea 7 (indexul primului bit 1)
mov rdx, 0x0000000000000F00 ; Biții 8, 9, 10, 11 sunt 1
bsr rbx, rdx ; RBX va primi valoarea 11 (ultimul bit setat)
Întrebări & Exemple de Cod:
Testarea și Scanarea Biților în x86_64: BT, BTS, BTR, BSF și BSRAi o nelămurire despre utilizarea comenzii
Testarea și Scanarea Biților în x86_64: BT, BTS, BTR, BSF și BSRsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.