Arm Thumb ( blx, bx, Thumb2, IT명령어, if then )
먼저 Thumb의 종류에는, Thumb과 Thumb2가 있다. Thumb은 2byte 명령어고, Thumb2는 2byte, 4byte로 명령어를 2개로 나눴다. CPSR 레지스터에 J, T bit가 있는데 이게 01로 set 되면 thumb 모드로 바뀐다. Thumb은 뭘까?? Arm 명령어를 Thumb 명령어로 바꾸는 것이다. 바꾸는 이유는 더 짧은 실행 시간과 code density 즉, 코드 사이즈 줄이기 때문이다. 이렇게 바꾸는 걸 Interworking이라 부른다. 굳이 긴 명령어가 필요없고 thumb이 지원하는 선에서 동작 가능하다면 변환해서 동작한다. 어떻게 서로 전환할까?? BLX(Branch link) , BX를 이용하여 함수 이름이나 레지스터를 뒤에 적어줘서 바꾼다. 예를 들어보자, 하..
2022. 4. 26.
Arm SWAP Instruction ( 메모리 접근, SWP, MESI protocol, LDREX, STREX )
Memory access 중에 swap instruction을 보자. SWAP Instruction swp r0, r1, [r2] 이런 식으로 사용하는데, 동작은 2가지로 나눠 볼 수 있다. 1. r2가 가지고 있는 주소의 데이터를 r0에 저장하고 2. r1의 값을 r2의 메모리 값에 저장한다. 즉 swapping 동작을 수행한다. 이런 동작이 왜 필요할까? 자원을 공유하기 위해서이다. 굉장히 중요한 동작인데 예를 들어, 하나의 프린터를 여러 컴퓨터가 공유한다고 할 때, 동시에 사용할 수 없기 때문에 사용 가능한지 안 한지 계속 확인해야 한다. 이런 부분을 확인하려면 메모리에 "Lock"이라는 부분을 확인해야 한다. 즉, Lock의 정보를 불러와서 확인하고 업데이트해야 하기 때문에 STR, LDR을 사용..
2022. 4. 7.