답변: 8086 CPU의 주소 지정 범위는 1MB입니다. 이는 8086 CPU에 20개의 주소 라인이 있고 2^20이 1024KB, 즉 1MB이기 때문입니다. 그러나 8086 시스템에서는 명령어가 16비트 주소만 제공하고 주소 지정과 관련된 레지스터의 길이는 16비트에 불과합니다. 따라서 주소 지정 범위는 64KB에 불과합니다. 1MB의 메모리 공간을 처리할 수 있도록 8086 CPU는 메모리를 4개의 논리 세그먼트로 나눕니다. CPU가 메모리에 액세스할 때 세그먼트 레지스터(세그먼트 기본 주소)의 내용은 자동으로 4비트(이진수 표현)만큼 왼쪽으로 이동한 다음 세그먼트 내의 16비트 주소 오프셋에 추가되어 20비트 물리적 주소를 형성합니다. 주소.
세그먼트 메모리에서 각 논리 주소는 16비트 세그먼트 기본 주소와 오프셋 주소로 구성됩니다.
물리적 주소: 00000H~FFFFFH까지의 메모리의 절대 주소는 메모리에 접근할 때 CPU가 실제로 주소를 지정하는 주소(절대 주소라고도 함)입니다
16비트 세그먼트 기본 주소는 4비트만큼 왼쪽으로 이동하고(세그먼트 기본 주소의 최하위 비트 뒤에 4개의 "0"을 추가하는 것과 동일) 오프셋 주소에 추가되어 물리적 주소를 얻습니다.
물리적 주소 = 세그먼트 기본 주소*16+오프셋 주소
?
세그먼트 메모리에서 각 논리 주소는 16비트 세그먼트 기본 주소와 오프셋 주소로 구성됩니다.
물리적 주소: 00000H~FFFFFH까지의 메모리의 절대 주소는 메모리에 접근할 때 CPU가 실제로 주소를 지정하는 주소(절대 주소라고도 함)입니다
16비트 세그먼트 기본 주소는 4비트만큼 왼쪽으로 이동하고(세그먼트 기본 주소의 최하위 비트 뒤에 4개의 "0"을 추가하는 것과 동일) 오프셋 주소에 추가되어 물리적 주소를 얻습니다.
물리적 주소 = 세그먼트 기본 주소*16+오프셋 주소
(1/2) 어셈블리 언어. 1. 8086/8088 CPU에서 허용되는 최대 저장공간은 (1MB+65520)이며, 물리적 주소번호는 (00000)부터 (ffff0+ffff+1=10FFF0)H까지 입니다. 2. 10진수 -46의 16진수는 (0FFD2h 또는 0D2H)
로 표현됩니다.십진수 46의 16진수 표현은 2EH
입니다.Microsoft Windows XP [버전 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:문서 및 설정관리자>디버그
-아
0AFE:0100 mov 도끼,2e
0AFE:0103 xor bx,bx
0AFE:0105 서브 bx,ax
0AFE:0107
-티
AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0103 NV UP EI PL NZ NA PO NC
0AFE:0103 31DB XOR BX,BX
-티
AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0105 NV UP EI PL ZR NA PE NC
0AFE:0105 29C3 서브 BX,AX
-티
AX=002E BX=FFD2 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0107 NV UP EI NG NZ AC PE CY
0AFE:0107 0029 추가 [BX+DI],CH DS:FFD2=00
-
레지스터는 16비트입니다. 예를 들어 AX, BX, SI, DI는 모두 16비트입니다. 2의 16승은 64K와 같으며, 이는 우리 프로그래머가 레지스터를 통해 직접 접근할 수 있는 메모리 공간입니다. 8086/8088 CPU가 제공하는 주소 버스는 20비트로, 2의 20승은 1M이다. 이는 CPU가 스스로 접근할 수 있는 최대 메모리 공간이다.
모순이 있습니다. CPU는 1M 메모리에 액세스할 수 있지만 레지스터는 64K 메모리 크기만 나타낼 수 있습니다. 따라서 세그먼트 주소와 오프셋 주소의 개념이 도입되었습니다. 이 1M 메모리 공간을 64K 크기의 세그먼트로 나누고 어떤 세그먼트를 지정한 다음 이 세그먼트의 시작 부분에 "오프셋 주소"를 추가하면 1M 메모리의 모든 공간에 액세스할 수 있지 않습니까?
세그먼트 주소를 얻는 방법:
예를 들어 문자 변수 STR은 어셈블리 데이터 세그먼트 어딘가에 선언됩니다
MOV DX,SEG STR
SEG 문을 통해 STR의 세그먼트 주소를 꺼내 DX로 보낼 수 있습니다.
위 내용이 도움이 되셨으면 좋겠습니다!
위 내용은 8086CPU에는 20개의 주소 라인이 있는데 주소 지정 가능한 최대 저장 공간이 1MB에 불과한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!