1. 

ldr r10, =0x2000001A

ldrb r10, =0x2000001A


위에거는 되고 밑에거는 에러뜸

address가 8자리라서 8bit가 아니라 8byte임.... 병신


2.

                             ldr                  r9, =0x22000000

                       mov                r10, #0x0

                       strb                r10, [r9, #0x34C]

위와 같은 명령어를 수행하면 bit banding을 사용하여 원하는 bit의 값을 바꿀 수 있다.

일단 임의의 레지스터 R9 alias region base address 0x22000000을 저장하고, 또 다른 레지스터 r10에 우리가 원하는 값인 0을 저장한다. 그 후 r10에 저장된 내용을 원하는 데이터의 원하는 bit mapping alias region의 주소에 저장한다. alias region을 계산하는 법은 간단하다. Bit band region0x20000000 alias region 0x22000000 에 대응되고, bit band region에서 0x1만큼의 차이는 alias region에서 0x20만큼 차이가 나고, 해당 데이터의 bit 사이에는 0x4만큼 차이가 난다는 사실을 이용하면 된다. 해당 데이터는 0x2000001A에 저장되어있으므로 0x22000000 + 0x1A * 0x20 = 0x22000340 이다. 그리고 3bit이므로 0x4 * 0x3만큼의 offset을 더해주면 effective address 0x2200034C를 구할 수 있다. 이 곳에 미리 저장해둔 r10 0을 저장해주면 해당 bit 0으로 reset되어 원하는 값을 얻을 수 있다.


3. 메모리의 주소를 알고 있을때 해당 주소의 데이터를 바로 로드하는 법은 없나?

'마이크로프로세서' 카테고리의 다른 글

prescaler  (0) 2014.05.07
501 ARM Mode와 PSR..너희들은 누구냐?  (0) 2014.04.08
Hexadecimal Subtraction and Multiplication  (0) 2014.04.01
carry & overflow  (0) 2014.04.01
assembly format  (0) 2014.03.18
Posted by bogus919
,