■ARM Operaing Mode

 

MOV R0, #0x104 => 1 0000 0100

MOV R0, #0x102 => 1 0000 0010

 

#operand 2 4bit#rot , 8bitImmediate으로 구성되어 있습니다.

 

◆0x104를 32bit로 표현하면

 

0x104 : 0000 0000 0000 0000 0000 0001 0000 0100

 

0100 0001을 오른쪽으로 30회전하면 0x104를 표현할 수 있습니다.

 

(0회전) 0000 0000 0000 0000 0000 0000 0100 0001

(1회전) 1000 0000 0000 0000 0000 0000 0010 0000

(2회전) 0100 0000 0000 0000 0000 0000 0001 0000

(3회전) 0010 0000 0000 0000 0000 0000 0000 1000

 

                                ....

 

(30회전)0000 0000 0000 0000 0000 0001 0000 0100

 

 

8-bit Immediate 상수값을 #rot2배한 만큼 오른쪽으로 로테이션(ROR)을 하는데

15 * 2 =30 으로 표현이 가능합니다.


◆0x102를 32bit로 표현하면


0x102 : 0000 0000 0000 0000 0000 0001 0000 0010

 

1000 0001을 오른쪽으로 31회전하면 0x102를 표현할 수 있습니다.

 

(0회전) 0000 0000 0000 0000 0000 0000 1000 0001

(1회전) 1000 0000 0000 0000 0000 0000 0100 0000

(2회전) 0100 0000 0000 0000 0000 0000 0010 0000

(3회전) 0010 0000 0000 0000 0000 0000 0001 0000

                                    ....

 

(31회전)0000 0000 0000 0000 0000 0001 0000 0010

 

여기서 ?? * 2 =31으로 표현이 가능해야 하는데 31을 표현할 수 없어서

0x102는 값을 만들 수가 없습니다.

 

즉, 회전하는 총 횟수가 2의 배수여야 합니다.

 

 

 

0xfc000003를 32bit로 표현하면 


0xfc000003: 1111 1100 0000 0000 0000 0000 0000 0011

 

 

8-bit Immediate값을 0xFF로 표현할 수 있습니다.

6회전을 하면 가능합니다. => #rot -> #0x3

 

(0회전) 0000 0000 0000 0000 0000 0000 1111 1111

(1회전) 1000 0000 0000 0000 0000 0000 0111 1111

(2회전) 1100 0000 0000 0000 0000 0000 0011 1111

(3회전) 1110 0000 0000 0000 0000 0000 0001 1111

(4회전) 1111 0000 0000 0000 0000 0000 0000 1111

(5회전) 1111 1000 0000 0000 0000 0000 0000 0111

(6회전) 1111 1100 0000 0000 0000 0000 0000 0011

 

#rot * 2 = 6, 8-bit Immediate = 0xFF

 

, ROR의 회전수가 2의 배수여야하고 8-bit Immediate(로테이션 할 값)8bit로 제한되어있어서 8bit를 초과하면 안된다는 조건이 있습니다.

 

 

 

 

 

+ Recent posts