8086 어드레싱 모델은 16 비트 세그먼트와 segment * 16 + offset
으로 결합 된 16 비트 오프셋을 고려했다.
최소 주소는 000000h이며 최대 값은 10ffefh입니다. 후자는 기술적으로 21 비트 값이지만
는 CPU는 어드레스 버스의 20 비트를 가지고 때문에 액세스 큰 어드레스는 단순히 2 감싸 0fffffh 상기 0fffffh1
이런 주소이었다 그래서 10ffefh은 0ffefh의 별명입니다.
일부 프로그램은 그 프로그램에 의존하기 시작했습니다.
80286이 나왔을 때 주소 버스에는 24 비트가있었습니다.
10ffefh과 같은 주소가 더 이상 포함되지 않았습니다.
이전 동작을 에뮬레이션 할 때 너무 많은 트랜지스터가 필요했기 때문에 (10ffefh은 AND로 마스크 할 수 없음) A20 마스크가 도입되었습니다.
이름에서 알 수 있듯이 21 번째 비트 인 20 번째 주소는 8055/8042 칩의 특정 레지스터의 특정 비트와 AND 연산을 수행했습니다.
BIOS가 시작할 때 해당 비트를 지워서 21 비트를 0으로 강제 설정하여 이전 동작을 에뮬레이션합니다.
A20을 활성화하지 않으면 모든 실제 주소의 21 번째 비트가 항상 0입니다.
이에 "32 비트 모드"가장 가까운 일이 평평한 모델, 보호 모드에서 A20을 가능하게 할 수 있지만, 메모리에 코드를 배치에주의해야합니다.
x86 어셈블리는 어셈블러에 대상 크기를 알려주어 16 비트 또는 32 비트 코드를 생성하는 데 동등하게 사용할 수 있습니다. 에 의해 주어
는
1 예를 들어, 0f000h의 세그먼트는이 0ffffh 오프셋.
21 번째 비트는 단순히 버려졌습니다.
16 비트 또는 32 비트 코드를 작성하는 경우 간단히 입력하십시오.
16 비트 및 32 비트 x86 어셈블리가 모두 있습니다. 어느 모드에서든 x86 어셈블리를 어셈블 할 수 있습니다. – fuz
생성되는 코드의 종류는 사용 된 실제 opcode 에서처럼 어셈블러 및 어셈블러 지시문 및 어셈블러 플래그에 따라 다릅니다. –