8086에는 14개의 16비트 레지스터가 있습니다. 이 14개 레지스터는 해당 항목에 따라 (1) 범용 레지스터, (2) 명령어 포인터, (3) 플래그 레지스터 및 (4) 세그먼트 레지스터로 나눌 수 있습니다. 4 종류. \x0d\\x0d\(1) 8개의 범용 레지스터가 있으며 2개의 그룹으로 나눌 수 있습니다. 한 그룹은 데이터 레지스터(4)이고 다른 그룹은 포인터 레지스터 및 인덱스 레지스터(4)입니다.\x0d\ \ x0d\data 레지스터는 다음과 같이 구분됩니다. \x0d\AH&AL=AX(누산기): 연산에 자주 사용되는 누적 레지스터입니다. 또한 곱셈 및 나눗셈과 같은 명령어에서 피연산자를 저장하도록 지정됩니다. 이 레지스터와 외부 장치는 데이터를 전송합니다.\x0d\BH&BL=BX(base): 주소 인덱스에 자주 사용되는 기본 주소 레지스터;\x0d\CH&CL=CX(count): 계산에 자주 사용되는 레지스터; 이동 중과 같은 계산된 값 비트 명령어, 루프 및 문자열 처리 명령어는 암시적 카운터로 사용됩니다.\x0d\DH&DL=DX(data): 데이터 레지스터, 데이터 전송에 자주 사용됩니다. \x0d\그 특징은 이 4개의 16비트 레지스터가 상위 8비트(AH, BH, CH, DH)와 하위 8비트(AL, BL, CL, DL)로 나눌 수 있다는 것입니다. 이 두 세트의 8비트 레지스터는 개별적으로 주소를 지정하고 독립적으로 사용할 수 있습니다. \x0d\\x0d\다른 그룹은 다음을 포함하는 포인터 레지스터 및 인덱스 레지스터입니다. \x0d\SP(스택 포인터): SS와 함께 사용되는 스택 포인터는 현재 스택 위치를 가리킬 수 있습니다. 기본 포인터) ): SS의 상대 기본 주소 위치로 사용할 수 있는 기본 포인터 레지스터; \x0d\SI(소스 인덱스): 소스 인덱스 레지스터는 DS 세그먼트에 상대적인 소스 인덱스 포인터를 저장하는 데 사용할 수 있습니다. x0d\DI(대상 인덱스): ES 세그먼트에 상대적인 대상 인덱스 포인터를 저장하는 데 사용할 수 있는 대상 인덱스 레지스터입니다. \x0d\이 4개의 16비트 레지스터는 16비트에서만 액세스 작업을 수행할 수 있습니다. 이들은 주로 피연산자의 주소를 형성하는 데 사용되며 스택 연산 및 인덱스 연산에서 피연산자의 유효 주소를 계산하는 데 사용됩니다. \x0d\\x0d\(2) 명령어 포인터 IP(명령어 포인터)\x0d\명령어 포인터 IP는 BIU가 명령어를 가져올 때 현재 가져와야 하는 명령어 바이트를 가리키는 16비트 특수 레지스터입니다. 메모리에서 바이트를 빼면 IP는 자동으로 1씩 증가하고 다음 명령어 바이트를 가리킵니다. IP는 오프셋 주소(오프셋 주소) 또는 유효 주소(EA, Effective Address)라고도 알려진 명령어 주소의 세그먼트 내 주소 오프셋을 가리킵니다. \x0d\\x0d\(3) 플래그 레지스터 FR(플래그 레지스터)\x0d\8086에는 18비트 플래그 레지스터 FR이 있습니다. FR에는 9개의 의미 있는 비트가 있으며 그 중 6개는 상태 비트이고 3개는 제어 비트입니다. \x0d\\x0d\OF: 오버플로 플래그 비트 OF는 부호 있는 덧셈 및 뺄셈 연산의 결과가 오버플로되는지 여부를 반영하는 데 사용됩니다. 연산 결과가 현재 피연산자 개수로 표현할 수 있는 범위를 초과하는 경우를 오버플로(overflow)라고 하며, OF의 값은 1로 설정되고, 그렇지 않은 경우 OF의 값은 0으로 지워진다. \x0d\DF: 방향 플래그 DF 비트는 문자열 연산 명령이 실행될 때 포인터 레지스터가 조정되는 방향을 결정하는 데 사용됩니다. \x0d\IF: 인터럽트 활성화 플래그 IF 비트는 CPU 외부의 마스크 가능한 인터럽트에 의해 발행된 인터럽트 요청에 CPU가 응답하는지 여부를 결정하는 데 사용됩니다. 그러나 이 플래그의 값에 관계없이 CPU는 CPU 외부에서 마스크할 수 없는 인터럽트에 의해 발생한 인터럽트 요청과 CPU 내부에서 생성된 인터럽트 요청에 응답해야 합니다. 구체적인 규정은 다음과 같습니다: \x0d\(1), IF=1일 때 CPU는 CPU 외부의 마스크 가능한 인터럽트에 의해 발생된 인터럽트 요청에 응답할 수 있습니다. \x0d\(2), IF=0일 때 CPU는 응답합니다. 마스크 가능한 인터럽트에 의해 발생한 인터럽트 요청에는 응답하지 않습니다. \x0d\TF: 추적 플래그 TF. 이 플래그는 프로그램 디버깅에 사용될 수 있습니다. TF 플래그에는 설정하거나 지우는 전용 명령이 없습니다.
\x0d\(1) TF=1이면 CPU는 명령어의 단일 단계 실행 모드입니다. 이때 명령어가 실행될 때마다 CPU에 있는 각 레지스터의 현재 값과 다음 명령어가 실행됩니다. CPU에 의해 실행된 내용이 표시됩니다. \x0d\(2) TF=0이면 연속 작업 모드입니다. \x0d\SF: 부호 플래그 SF는 연산 결과의 최상위 비트와 동일한 연산 결과의 부호 비트를 반영하는 데 사용됩니다. 마이크로 컴퓨터 시스템에서 부호 있는 숫자는 보수 표현을 사용하므로 SF도 연산 결과의 부호를 반영합니다. 연산 결과가 양수인 경우 SF 값은 0이고, 그렇지 않은 경우 값은 1입니다. \x0d\ZF: 제로 플래그 ZF는 연산 결과가 0인지 여부를 반영하는 데 사용됩니다. 연산 결과가 0이면 값은 1이고, 그렇지 않으면 값은 0입니다. 이 플래그는 연산 결과가 0인지 판단할 때 사용할 수 있습니다. \x0d\AF: 다음 상황에서 보조 캐리 플래그 AF의 값은 1로 설정되고, 그렇지 않으면 그 값은 0입니다: \x0d\(1) 워드 연산 중에 하위 바이트에서 캐리 또는 차용이 수행됩니다. 상위 바이트가 발생하는 경우; \x0d\(2), 바이트 연산 중 하위 4비트에서 상위 4비트로 캐리 또는 차용이 발생할 때. \x0d\PF: 패리티 플래그 PF는 연산 결과에서 "1" 개수의 패리티를 반영하는 데 사용됩니다. "1"의 개수가 짝수이면 PF 값은 1이고, 그렇지 않으면 값은 0입니다. \x0d\CF: 캐리 플래그 CF는 주로 작업이 캐리 또는 빌림을 생성하는지 여부를 반영하는 데 사용됩니다. 연산 결과의 가장 높은 비트가 캐리 또는 차용을 생성하는 경우 해당 값은 1이고, 그렇지 않은 경우 해당 값은 0입니다. ) \x0d\\x0d\4) 세그먼트 레지스터\x0d\모든 메모리 공간을 사용하기 위해 8086은 세그먼트 주소를 저장하기 위해 특별히 4개의 세그먼트 레지스터를 설정합니다. \x0d\\x0d\CS(코드 세그먼트): 코드 세그먼트 레지스터; x0d\DS(데이터 세그먼트): 데이터 세그먼트 레지스터, \x0d\SS(스택 세그먼트): 스택 세그먼트 레지스터, \x0d\ES(추가 세그먼트): 추가 세그먼트 레지스터. \x0d\\x0d\프로그램이 실행될 때 프로그램 코드, 데이터 및 스택에서 사용할 메모리 위치를 결정하고 세그먼트 레지스터 CS, DS, 그리고 SS. 일반적으로 DS는 고정되어 있고 CS는 필요에 따라 수정됩니다. 따라서 주소 지정 가능한 공간이 64K 미만인 경우 프로그램을 어떤 크기로든 작성할 수 있습니다. 따라서 프로그램과 해당 데이터의 결합된 크기는 DS에 표시된 대로 64K로 제한됩니다. 이것이 바로 COM 파일이 64K보다 커서는 안 되는 이유입니다. 8086은 메모리를 전장으로 활용하고 군사기지로 등록해 작업 속도를 높인다