다음과 같은 경우 명령어 큐에 첫번째로 B8 66이 들어옵니다.
1. B8|66|00|00|00|00
2. 66|10|8E|00|00|00
3. 10|8E|D8|90|00|00
명령어가 주 기억장치에서 팻치되는 대략적인 순서 입니다.
위에서 보았다 시피 2byte 단위로 팻치를 받습니다.
이 것뿐 아니라 명령어 실행중 간접사이클 실행시 역시 주 기억장치에서
데이터를 읽어 오는 것 역시 짝수 경계를 기준으로 읽어옵니다.
데이터가 홀수 번지에서 시작하여 짝수 번지에 걸처 있을 경우, 예를 들어 위의
MOV DS,AX 를 보면 3~4, 2~3번지를 한번 읽고 4~5번지를 또한번 읽습니다.
즉 두번 읽게 되는 겁니다. 어떻게 보면 매우 비효율적 입니다.
인텔에서는 왜 그렇게 만들었을 까요? 16bit 8086 CPU의 경우 주 기억장시에서
메모리를 읽고 쓸때 짝수 뱅크와 홀수 뱅크로 나뉘어서 관리하는 것은 알지만,
단지 이것 때문이라고는 이유가 너무 불충분하고 또한 확실하지 않습니다.
어셈러브 분들 도대체 왜!!2byte를 꼭 짝수 경계로 읽어와야 하는 걸까요?
> > 어셈러브 분들 도대체 왜!!2byte를 꼭 짝수 경계로 읽어와야 하는 걸까요?- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -
메모리 접근이 16비트 단위로 되니까 항상 2바이트씩 읽게되니까요
0번지, 2번지, 4번지... 이렇게 읽으니
결국 주소 비트에서 0번 비트는 안쓰자나요.
그래서 회로도에서 주소 버스 연결을 보면 A0번 라인이 없습니다.
CPU가 작은데 핀 하나의 공간도 아쉬우니까요 그렇게라도 핀 하나를 줄이는 것이지요.
따지고 들면 몇가지 이유가 더 있는데
가장 큰 이유는 메모리 버스 크기 단위에 따라 주소 라인이 설계되기 때문입니다.
> > > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -