So the basic logic we use is to check weather a number divides with 2 or not . Here we can use another logic by rotating the value in the accumulator to the right through carry and then make the decision based on the value of the carry.I will post both the methods..

Method 1: Using DIV instruction

ORG 000h

MOV A,#*number ;The number to be checked for even or odd** * MOV B,#02h ;*divisor*

DIV AB ;*Divides the unsigned value of the Accumulator by the unsigned value of the “B” register. The resulting quotient is placed in the Accumulator and the remainder is placed in the “B” register.If remainder is 1 then the number is odd.** ** *MOV R0,B

CJNE R0,#0h,odd

MOV A,#00h ; *moving 0 to show its even*

SJMP even

odd: MOV A,#01h ;*moving 1 to accumulator to show the number is odd…you can do any other operation.*even: NOP

END

*Now why did i add “*SJMP even “

*is the code executes sequentially ,even there is a label .The compiler does not skip labels.*

*METHOD 2: Using*RR

*instruction*

*ORG 000h*

MOV A,#

*number ;The number to be checked for even or odd*

RRC A ;

*rotates the accumulator right through carry*

*JC odd*

MOV A,#00h ;

*moving 0 to show its even*

SJMP even

odd: MOV A,#01h ;

*moving 1 to accumulator to show the number is odd…you can do any other operation.*

*even: NOP*

END

*If the number is odd the it will have the lsb as binary 1,and if even lsb will be binary 0….*