2009-05-21 3 views
5

맨손으로 CPU (x86), 32 비트 보호 모드 및 OS가 실행되지 않는 하드웨어 디버그 도구를 만드는 중입니다. 시간 제약으로 인해 x86 어셈블리에이 도구를 모두 쓰지 않을 것입니다. 나는 Ada 언어를 좋아하지만,이 프로젝트에 C가 아닌 Ada 언어를 사용하는 것이 흥미로울 것이라고 생각했다.Ada 및 어셈블리

C에서는 키보드 입출력이나 화면에 텍스트를 표시하는 것과 같은 기본 작업을 위해 BIOS에 액세스하기 위해 어셈블리로 작성된 인라인 어셈블리 또는 호출 하위 프로그램을 사용할 수 있습니다. Ada는 비슷한 기능을 가지고 있습니까? 그렇다면 어셈블리 메서드를 호출하고 어셈블리 메서드를 호출하기위한 리소스 또는 자습서를 아는 사람이 있습니까?

+2

OS를 사용하지 않는 이유는 무엇입니까? 모든 하드웨어 (화면, 키보드 등)에 액세스하는 것은 어렵습니다. 왜 OS가 그것을 처리하게하지 마십시오. 리눅스는 무료입니다 ;-) – lothar

+0

왜 내가 주장합니까? 리눅스 소프트웨어를 작성하지 않고 하드웨어를 디버깅하고 있습니다! : p PCI 버스 재설정을 수행하고 구성 레지스터를 수정해야합니다. 필자는 Linux의 저수준 작업을 많이하지 않았지만 Windows 환경에서는 패리티 오류 (PERR #), 시스템 오류 (SERR #) 및 PCI 버스 재설정 (RESET #)이 치명적인 이벤트입니다. –

답변

5

Ada에서 인라인 어셈블리 코드를 사용할 수 있습니다. Asm (오버로드 된) 기능을 제공하는 System.Machine_Code 패키지를 사용해야합니다.

+0

감사! 그 트릭을해야합니다! –

2

GNAT 참조 설명서에는 Machine Code Insertions에 관한 섹션이 있으며, GNAT 관련 사항이지만 다른 컴파일러를 사용하는 경우에도 GNAT 관련 기능에 대한 일반적인 이해를 얻을 수 있어야합니다.

+0

무료 도구를 사용하고 싶습니다. GNAT를 고수 할 것입니다. 그것은 결국 취미 프로젝트입니다. –