# Decide if a number is even or odd by using bitwise operator

The following exercise is from an Assembler-course I'm taking:

Write a program that takes a number x as input, and returns:

• 0 if x is even.
• 1 if x is odd.

Full exercise-page here: GitHub

Here's my solution:

format PE console
entry start

include 'win32a.inc'

; ===============================================
section '.text' code readable executable

start:

call    read_hex        ; Provided by the teacher. Reads a hexadecimal number from stdin.

and     eax,    0x1

cmp     eax,    0x0
je      print_result

mov     eax,    0x1
print_result:
call    print_eax_binary    ; Provided by the teacher. Prints a binary number to stdout.

; Exit the process:
push    0
call    [ExitProcess]

include 'training.inc'


I would say it works alright:

• Is my solution valid?
• Can it be improved? Respectively, is there a better solution possible?

Here are some things that may help you improve your code.

## Simplify your code

This can certainly be simplified. Keep the goal in mind: get either 0 or 1 into EAX. Once you've executed this instruction:

and     eax,    0x1


That's exactly what you have. So that means all of this can be deleted:

    cmp     eax,    0x0
je      print_result

mov     eax,    0x1
print_result:


And all you need to do is print the result:

call    print_eax_binary