GCC을 사용하여 간단한 운영 체제를 작성하려고하는데, 입력 한 디스플레이에 텍스트를 표시 할 수 있습니다. 나는 C에 인터럽트 테이블을 가지고 있는데 외부 어셈블리 언어 모듈보다는 인라인 어셈블리를 사용하여로드 할 수 있기를 원합니다.인라인 어셈블리에서 LIDT를 사용하여 인터럽트 벡터 테이블을로드하는 방법은 무엇입니까?
내가 찾고있는 것은 C 인라인 어셈블리에 포인터를 전달하는 방법입니다.
메모리 피연산자 LIDT 인 요구 I 인라인를 시도하고 다음 명령어 글로벌 디스크립터 테이블 레지스터 (GDTR) 또는 인터럽트 디스크립터 테이블 레지스터에
로드 소스 피연산자의 값 (IDTR) . 소스 피연산자는 글로벌 설명자 테이블 (GDT) 또는 인터럽트 설명자 테이블 (IDT)의 기본 주소 (선형 주소)와 제한 (테이블의 크기)을 포함하는 6 바이트 메모리 위치를 지정합니다. 피연산자 크기 속성이 32 비트이면 16 비트 제한 (6 바이트 데이터 피연산자의 하위 2 바이트) 및 32 비트 기본 주소 (데이터 피연산자의 상위 4 바이트)가 레지스터에로드됩니다. operand-size 속성이 16 비트이면 16 비트 제한 (하위 2 바이트)과 24 비트 기본 주소 (세 번째, 네 번째 및 다섯 번째 바이트)가로드됩니다. 여기서 피연산자의 상위 바이트는 사용되지 않으며 GDTR 또는 IDTR의 기본 주소의 상위 바이트는 0으로 채워집니다.
이것은 보호 모드에 있다고 가정하고 'lidt' 명령을 사용하여 6 바이트 IDT 레코드 (기본 주소와 제한이 있음)가있는 메모리 위치에서 IDTR을로드하려고합니다. –