2011-10-04 2 views
3

현재 emu8086을 사용하고 있습니다 (8086mP 용으로 프로그래밍하고 있습니다)하지만 int 21h/ah = 5bh와 많은 others.What과 같은 인터럽트를 이해할 수 없기 때문에 emu8086에 어려움을 겪습니다. 어떤 어셈블러/ide를 사용해야합니까? 다른 인터럽트를 사용할 수 있습니까? (Emu8086도 나중에 추가해야하는 인터럽트를 지원하지 않습니다.)기존 인터럽트 대부분을 지원하는 어셈블러는 무엇입니까?

+0

인터럽트 서비스 루틴은 프로세서의 기능이나 어셈블러의 기능이 아닙니다. BIOS 및 운영 체제가 제공하며 지구상의 어셈블러와 아무 관련이 없습니다. 반면에 'int'니모닉은 (사실 'int 3'을 제외한'0CDh '로 번역되는) 거의 모든 것들에 의해 지원됩니다. 요약하면 질문은 실제로 의미가 없습니다. 특히 어셈블러와 에뮬레이터 간의 혼란이 올 때. 'int 21h'의 경우, DOS – Powerslave

답변

0

몇 번만 x 86 에뮬레이터가 필요합니다. this을 사용합니다.

1

. 문제가 트랩을 통해 다양한 시스템 트랩 또는 OS 호출에 대한 소위 opcode를 갖는 것이면 가장 쉬운 방법은 각각의 트랩에 대해 매개 변수화 된 매크로를 정의한 다음 적절한 매크로를 호출하는 것입니다.

그래서 "int21/ah = 5bh"는 "OutputCharacterAL"에 대한 OS 호출을 나타낼 수 있습니다. 당신은 매크로 정의 것 :

OutputCharacterAL macro 
      mov ah,5bh 
      int21 
      mend 

을 거의 모든 어셈블러가이 작업을 수행하게됩니다

  mov AL,"*" 
     OutputCharacterAL 

하여 호출하므로, 어떠한 "최고"없다.

+0

을 설치하면 런타임 라이브러리를 정의 할 수 있습니다. – Powerslave

+0

@Powerslave : 가격으로 할 수 있습니다. 트랩의 요점은 OS와 애플리케이션 사이의 격리를 제공하는 것입니다. 서브 루틴 라이브러리를 고집한다면, 각 "OS 호출"은 함정을 수행하기 전에 서브 루틴 호출 양식으로 여분의 오버 헤드가 있거나 OS가 응용 프로그램과 분리되어 있지 않다는 의미입니다. 매크로 라이브러리를 정의하면 OS 오버 헤드가 중요하지 않은 OS 호출에 대해 항상 런타임 라이브러리 호출을 생성 할 수 있으며 서브 루틴은 OS 측에서 수행하기에 어색한 사용자 공간 작업을 사용할 수 있습니다. –

+0

글쎄요, 모든 OS는'fork()'나'HeapAlloc()'등과 같은 RTL 함수들과 거의 동일합니다 (이 두 가지는 OS에 따라 다릅니다). 그 목적은 실제로 응용 프로그램을 커널에 트랩하는 코드 스텁으로부터 격리시키는 것입니다. 이것은 조잡한 디커플링과 멋진 깨끗한 API를 제공합니다. 트랩의 요점은 OS로부터 격리하는 것이 아닙니다 (OS 고유의 벡터를 호출하므로 사용자는 그와 긴밀하게 결합됩니다). 그러나 사용자 영역에서 권한있는 코드를 호출 할 수있는 방법을 제공합니다. 또한 커널에 트 랩핑하는 오버 헤드 외에도 서브 루틴 호출 비용은 무시할 수 있습니다. – Powerslave