x64 NASM Assembler: Binary Search
Code style
Your code style is certainly acceptable - everyone is entitled to their own coding habits.
To further improve readability, and readability is key, I would change the following:

put all labels in the same separate column. You didn't do this for is_even, fmt, target, list, and len.
don't just have 1 space character between the instruction/directive and its operand(s). Start all operands in their own column.
beware of redundant comments like 'mov r12, list  ; load list into register'
don't add redundant tags like dword in mov r14d, dword [r12]. The register name r14d already states this is a dword.
avoid using ambiguous terminology. I found it odd to read about sectors and widths. In case of binary searching, many people will prefer to talk about array partitions and number of elements.

The code has multiple issues
You seem to be confident that a match will always be found. No provision is made for a failure!
The comment on mov rdx, r12  ; rdx is pointer to the target is wrong. What you've got is a pointer to the matching array element.
The array list holds dword-sized elements. In mov r13, len &gt;&gt; 3, you only need to shift twice to get the number of elements.
In the top part of the program you first add an imaginary element to the array, then you make r12 point to behind it, and later your code also happily reads from these non-existing elements. Analyzing beyond this point becomes futile.
I think having recognized an attempt to write a uniform binary search. Although I didn't use that particular approach, you might find it interesting to read a post of mine that shows 2 ways to binary search an array. I know it was written for 16-bit, but that should not stop you from stealing from it...