안녕하세요 ㅎㅎ 운영체제 공부에 이 강의가 많은 도움이 되고 있습니다.
다른건 아니구 친구랑 공부를 하다가 나온 질문입니다.
저희가 c언어를 배울 때, 주소를 표현할 때 그 주소값 안에 들은 데이터만큼 크기를 가지고 있어서 만약에 int로 구성된 배열이면 첫번째 인덱스가 10이라는 주소이면, 두번째 인덱스는 14가 되잖아요.
근데 명령어에서 PC 레지스터를 배우면서 다음 명령어로 가기 위해서 PC+1이 되는데, 이게 현재 가지고 있는 값이 300이면 다음에 넣어지는 값이 301이더라구요. 이게 .. 주소가 16비트면.. 316이 되거나 뭐 그래야하지 않나요.,.?? ㅜㅜㅜㅜ
안녕하세요 혜성님!
친구랑 공부하다가 궁금증이 생기셨군요?
저도 예전에 친구와 공부하다가 궁금증을 같이 해결하던 재밌는 추억이 있는데 부럽습니다 ㅎㅎ
혹시
이걸 확인한 코드를 저도 확인할 수 있을까요?
답글
혜성
2023.03.13아!! 코드는 아니구요 연습문제였어요!!
사진 첨부하겠습니다 ㅎㅎ
감자
2023.03.13해당 문제에서는 명령어마다 주소를 할당하는 방식으로 설명해서 그렇습니다.
문제를 보면 2바이트 단위로 접근하는 컴퓨터라고 말하고 있고
그에 맞게 명령어는 2바이트(16bit)로 이루어져 있습니다.
그리고 각 명령어마다 주소를 할당한 것이죠.
0x062A에 저장된 명령어는 0x961B로 비트로 표현하면 1001 0110 0001 1011로 총 16비트입니다.
만약 32bit CPU를 사용한다면 4바이트 단위로 주소를 할당했을 것이고
이 시스템에서 PC에 1을 올려준다면 32비트를 이동하게 될 겁니다.
만약 바이트마다 주소를 할당한다면 혜성님이 말씀하신 것처럼 다음 명령어를 실행할 때 워드 단위(여기선 2바이트)로 증가할 겁니다.
주소를 할당하는 기준(명령어 마다 or 바이트 마다)에 따라 설명이 달라질 수도 있는데
중요한건 완벽히 다음 명령어를 가리키게 한다는 점을 기억하시면 될 것 같습니다!
궁금증이 해결되셨나요?😀
혜성
2023.03.13네 궁금증은 해결 됐습니다!>_<
그럼 PC의 값은 시작할 때, 62A 였는데, 다음 명령어를 실행하면서 62B가 되는 것은 맞을까요?
들려주신 설명을 제가 이해하기로는 62B가 아니라 63A가 되는게 아닐까해서요! ㅎㅎ
감자
2023.03.1362A에서 +1(다음 주소)를 했으니 62B가 됩니다!
한 번 더 더하면 62C가 됩니다.
(2바이트 마다 주소를 할당하므로)
😊
혜성
2023.03.13아!!! 이해했습니다 ㅎㅎㅎㅎ
감사합니당!!!