문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 x86 (문단 편집) ==== 레지스터 ==== 범용 레지스터 * 0: AX (Accmulator) - 16-bit * AH - High 8-bit / AL[*A* 8080의 'A' 레지스터에 대응] - Low 8-bit * 1: CX (Count) - 16-bit * CH[*B* 8080의 'B' 레지스터에 대응] - High 8-bit / CL[*C* 8080의 'C' 레지스터에 대응] - Low 8-bit * 2: DX (Data) - 16-bit * DH[*D* 8080의 'D' 레지스터에 대응] - High 8-bit / DL[*E* 8080의 'E' 레지스터에 대응] - Low 8-bit * 3: BX (Base) - 16-bit * BH[*H* 8080의 'H' 레지스터에 대응] - High 8-bit / BL[*L* 8080의 'L' 레지스터에 대응] - Low 8-bit * 4: SP[*SP* 8080의 'SP' 레지스터에 대응] (Stack Pointer) - 16-bit * 5: BP (Base Pointer) - 16-bit * 6: SI (Source Index) - 16-bit * 7: DI (Destination Index) - 16-bit 세그먼트 레지스터 (16-bit) * 0: ES (Extra Segment) - 문자열 처리 명령어의 Destination에 기본적으로 사용된다 * 1: CS (Code Segment) - 명령어 인출에 사용된다 * 2: SS (Stack Segment) - 스택 명령어 및 주소 지정시 BP를 base 레지스터로 둔 경우 기본적으로 사용된다 * 3: DS (Data Segment) - 변수 또는 문자열 처리 명령어의 Source에 기본적으로 사용된다 특수 레지스터 * IP[*PC* 8080의 'PC' 레지스터에 대응] (Instruction Pointer) * FLAG[** 하위 8비트는 8080의 플래그 레지스터와 동일] (x x x x [*O Overflow Flag, 오버플로 플래그. 연산 결과가 연산 범위를 초과하였을 때 켜지는 플래그이다. 음수 플래그와는 다르다. 이 플래그는 덧셈을 할 때 연산 전의 결과가 양수고 연산 후의 결과가 음수일 때 켜진다. 또는 뺄셈을 할때 위와 반대 경우면 켜진다. 대신 0이면 켜지지 않는다.] [*D Direction Flag, 방향 플래그. 문자열 연산(명령어 뒤에 S가 붙는 명령어들, 예를 들어 MOVS 같은 것)은 연산후에 주소값이 자동으로 더해지는데(더해지는 값은 사용하는 자료형의 바이트의 크기를 따른다.) 이 방향을 정하는 비트다. 1이면 역방향으로 더해진다.] [*I Interrupt Mask Bit, 인터럽트 무시 비트. 외부 인터럽트를 받을지 말지 결정하는 플래그이다. 0이면 외부 인터럽트를 받지 않는다. 다만 무시 불가 인터럽트(NMI)까지 거부할 수 없다.] [*T Trap Flag, 트랩 플래그. 이 플래그가 켜지면 명령어가 실행될 때마다 인터럽트가 걸린다. 디버거에서 주로 사용된다.] | [*S Sign Flag, 음수 플래그. 연산 결과가 음수일 때 켜진다. 오버플로 플래그와 다른 점은 연산 전의 값은 상관없다는 것이다.] [*Z Zero Flag, 제로 플래그. 연산 결과가 0일 때 켜진다. 비교 후 결과가 서로 같음을 기록하는데 쓰인다.] x [*A Auxiliary Carry Flag, 보조 캐리(올림) 플래그. 8비트 중에서 하위 4비트의 올림을 기록하는 데 사용된다. 정확한 용도는 두 값의 연산 후에 BCD 결과로 보정하는 용도로 쓰인다. x86은 BCD 연산을 지원하지 않기 때문에 일단 계산하고 결과를 원래 BCD 연산의 결과에 맞게 보정한다. 8비트 연산에서만 효과가 있고 16비트 이상의 연산에서는 하위 8비트의 결과만 보정해 준다.] x [*P Parity Flag, 패리티 플래그. 8비트 연산 결과의 1의 개수가 짝수거나 0개면 켜진다. 예를 들어 0xb7, 10110111이 결과일 경우 켜지지 않지만 1이 증가하면 1의 개수가 짝수가 되므로 켜진다.] x [*C Carry Flag, 캐리(올림) 플래그. 올림 또는 빌림이 발생하면 켜진다. ADC, SBB 등의 올림(빌림)을 같이 더해 주는 연산을 해서 16비트라는 적은 크기의 자료형을 32, 64비트로 확장할 수 있다.)]) x86-16은 4개의 비트 범용 레지스터(AX, CX, DX, BX)를 가지고 있다. 이 레지스터들은 상위 8비트와 하위 8비트로 분할하여 사용할 수 있다.(AL, CL, DL, BL, AH, CH, DH, BH) 어떤 명령에서든지 제약없이 사용 가능하다. 하지만 각자 특수한 기능들을 가지고 있어 완전한 범용 레지스터라고 하기 힘들다. CX 레지스터는 LOOP 계열 명령어에서 남은 횟수를 기록하기 위해 사용되며, DX는 AX 레지스터의 확장, 보조 용도 또는 포트 번호로 사용될 수 있고 BX 레지스터는 주소용으로 사용된다. AX 레지스터는 즉시 연산(소스 레지스터나 메모리를 지정할 필요 없이 바로 뒤에 필요한 값이 뒤따라온다.)등에 사용되기 때문에 실질적으로는 범용 레지스터와 특수 목적 레지스터의 중간에 위치하는 레지스터이다. 주소용 인덱스 레지스터로 SI와 DI 두 개의 16비트 레지스터를 가지고 있다. 범용 레지스터 보다는 특수 목적 레지스터에 가깝다. 보통 주소를 담고 있으며 문자열 연산 명령어에 사용된다. 스택 포인터로 SP와 BP를 가지고 있다. 완전한 특수 목적 레지스터로 사용된다. 현재 스택의 꼭대기와 스택 프레임을 담고 있기 때문에 일반적인 용도로(계산 등) 사용할 수는 있지만 설계 목적상 실제 사용은 하지 않는다. 함수에서 지역 변수 공간을 만들기 위해 스택 포인터의 값을 증가 또는 감소시키거나 베이스 포인터는 이전의 스택 프레임의 위치를 기억하기 위해 PUSH, POP 하기는 한다. 20비트의 주소 지정을 위한 ES, CS, SS, DS 4개의 16비트 세그먼트 레지스터를 가지고 있다. 완전한 특수 목적 레지스터이며 연산은 물론이고 이동조차 자유롭지 못한다. 주소 지정에 대해서는 주소 지정 문단을 참고 프로세서의 상태나 연산 결과의 상태를 기록하기 위해 플래그 레지스터를 가지고 있다. 하위 8비트는 8080에서 사용되는 레지스터와 동일하며 상위 8비트로 새로 확장되었다. {{{#!folding 각주 [ 펼치기 · 접기 ] [각주]}}}저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기