arm에 대한 질문입니다.
arm에 대해 계속 관심갖고 공부중인데요. 공부하다가 명확하지 않은것들 질문 드립니다.
1. sticky 하다는게 무슨 말인가요.
책의 한문장을 인용하면 "이 플래그는 하드웨어에 의해서만 1로 설정될 수 있다는 점에서
sticky 하다고 볼 수 있다"라는 부분이 있습니다. 그리고 이 arm core의 인터럽트에 관한
부분을 보면 인터럽트가 발생하면 "srcpnd, intpnd레지스터의 비트를 클리어 해주어야 하는데
이 두 레지스터의 모든 비트는 1로 설정했을때 클리어 되는 sticky 비트이다" 라는 말이 유저
메뉴얼에 있었습니다.
이 sticky 하다는건 무슨 표현인가요
사전 의미로는 "끈적끈적한, 들러붙는", 구어체로는 "불쾌한, 귀찮은"등이 있었습니다.
저는 사전적의미와 아무리 생각해도 유추가 안되네요..
2. 이건 기초적인 부분인데 요즘들어 정말 헷갈립니다.
cpsr에 보면 네개의 플래그가 있습니다. Z, N, C, V입니다.
이중에 N은 연산결과 부호가 변경되었을때, Z는 값이 0이 되었을때,
C는 캐리가 발생되었을때, V는 오버플로우가 발생되었을때라고 말은 합니다.
제가 명확하게 구분을 못하고 있는건, 캐리와 오버플로우의 차이입니다.
제가 생각할때는 캐리는 부호비트가 변경되면 발생하고, 오버플로우는 0xffffffff에 1을 더한것과
같은 경우에 발생되는거 아닌가 하는데, 확신이 없어서요.
아래는 2번째 질문을 올리게 한 바로 그놈(책의 예제)입니다.
PRE cpsr = nzcvqiFt_USER
r1 = 0x00000001
SUBS r1, r1, #1
POST cpsr = nZCvqiFt_USER
r1 = 0x00000000
여기서 문제는 왜 캐리가 발생했나 하는것입니다. 위에 말했듯이 제가 생각한 캐리는
연산에 의해 부호가 변경되었을때라고 생각했는데, 이 예제를 보고나서 답이 안나옵니다. -_-;
#. 질문이 너무 길어졌네요. 보통 이렇게 질문이 길면 답변이 잘 안달리는거 같았는데,
질문 두개를 하나씩 나눌까 하다가 그냥 적습니다. (좀 후회할것도 같구요 ㅎ)
오늘/내일 공부열심히 하고, 토요일 축구보고 하루종일 놀려고 마음먹습니다.
마음같아서는 시청이든 어디든간에 나가고 싶은데 막상 나가면 사람에 치여서
고생할까 염려되서 조용하게 마음속으로만 응원합니다.
(요즘 이래서 제가 나이 들은거 같은 생각이 안들수가 없습니다.)
댓글 달기