Bit Manipulation – ARM Assembly

I recently posted a content which was related to bit manipulation in C programming and now I decided to show you how to do same things in ARM assembly languages. In advance, I would like to mention that I am learning ARM assembly language currently and I am tring to share my learning process on my blog. On my blog, I try to share with you my knowledge and explain some topics which I have learnt. In this post I would like to show you only how to do the bit manipulation. However, if you want to broaden your knowledge in the topic of ARM, I recommend you to obtain documents provided by ARM and read details about each instruction.

SETTING A BIT

        ;       SETting a bit	
	        MOV R0,#variable
	        MOV R1,#1	
	        ORR R0,R1,LSL #position_of_bit

RESETTING A BIT

        ;       RESETting a bit 
	 	MOV R0,#variable
	 	MOV R1,#1
	 	BIC R0,R1, LSL #position_of_bit

TOGGLING A BIT

	;       TOGGLing a bit	
		MOV R0,#variable
		MOV R1,#1
		EOR R0,R1, LSL #position_of_bit

CHECKING A BIT

	;       CHECKing a bit 	
		MOV R0,#variable
		MOV R1,#1
		AND R2,R0,R1, LSL #position_of_bit

R0 contains the original value of #variable and we do not want to impact this value while checking a bit. So, we use R2 register to store the result.

While writting this content, one question came to my mind – cannot I use shift operators like I was doing in C? Then, I decided to give it a try. And… The answer is YES! So lets examine it 🙂

           ;Setting a bit
           MOV R0,#variable
	   ORR R0,#(1<<position_of_bit)
	   
	   ;Resetting a bit
	   MOV R1,#variable
	   AND R1,#~(1<<position_of_bit)
	   
	   ;Toggling a bit
	   MOV R2,#variable
	   EOR R2,#(1<<position_of_bit)
	   
	   ;Checking a bit
	   MOV R3,#variable
	   AND R4,R3,#(1<<position_of_bit)

While checking a bit, you should not forget to save a result in another register in order not to affect the original value of variable.

I realised that learning assembly language caused that I am more keen C programming. However, I would like to keep learning assembly to have better understanding of hardware and computer architecture. Additionaly, I believe that in the nearest future I will find some reasons to use assembly by mixing it with C.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s