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 region의 0x20000000이 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 |