# Asmbits Part 2

Today I gave asmbits a try, this time the questions were simple like the ones I solved the other day.

##### Write a function that returns the bitwise inversion of its parameter.

We need to invert the bits that make up the integer.

.global _start _start: mov r0, #1 bl invert 1: b 1b .global invert invert: mvn r0, r0 bx lr

##### Write a function that returns the whether its parameter is odd. Return 1 if odd, 0 if even.

This question was more interesting as there were multiple ways to solve it, the slower solution would involve runnig the following code

bool is_odd(int n){ return n % 2 > 0; }

This solution will result in multiple assembly instructions including a branch instruction. A faster solution would be the following, where we mask all the bits except for the least significant one.

.global _start _start: mov r0, #1 bl odd 1: b 1b .global odd odd: AND r0, r0, #0x00000001 bx lr

Here is another alternative solution

.global _start _start: mov r0, #1 bl odd 1: b 1b .global odd odd: BIC r0, r0, #0xFFFFFFFE bx lr