# Challenge #10

Here I’m again, this time with the 10th challenge from challenge.re. This one it’s quite short, and according to the author, also tricky, let’s see what we have in this case.

## Analysis

Assembly code to understand

```
f:
lea eax, [rdi-1+rsi]
neg esi
and eax, esi
ret
```

We have basically 4 operations, including the `ret`

one. First we have two arguments, one in `rdi`

and the other one in `rsi`

. Looking at the use of them, we can assume they are numbers. Let’s assume that both of them are 32 bits integers, given that `rdi-1+rsi`

its store in the `eax`

register, which is a 32 bits register.

The next instruction it’s a negation of the number in `rsi`

, followed by and **AND** operation between this negation with the first number. This it’s confusing when you read all this without a real number examples. Let’s put that into C code.

```
in f(int a, int b)
{
return (a - 1 + b) & (~ b);
}
```

Still confusing….ðŸ¤”…no idea what’s this? Reading the description of the problem, it says:

This code snippet is short, but tricky. What does it do? It’s used heavily in low-level programming and is well-known to many low-level programmers. There are several ways to calculate it, and this is the one of them.

So…still no idea, this doesn’t ring a bell to me. If anyone knows about it, let me know, I’m curious about what this computes.