2012-02-21 2 views
1

이것은 더 간단 할 수는 없지만 작동하지 않습니다. 어셈블리 언어로 CD/광학 드라이브를 꺼내십시오.

은 내가 광학 드라이브가

코드는 어셈블리 언어, 인텔 NASM 구문에 나옵니다 있는지 확인하기 위해 사용하고 간단한 코드가 있습니다.

[BITS 16] 
[ORG 0X07C00] 
STI 

Eject: 

mov ah, 46h 
mov al, 00h 
mov dl, 00h 
int 13h 

endprogram: 
times 510-($-$$) db 0 
db 0x55 
db 0xAA 

드라이브 번호를 단순히 늘릴 수는 있지만 드라이브가 0이면 올바르게 작동하지 않아야합니까? 드라이브가 어딘가에

진수 (128)의 주위에 감사를 시작할 수 있으며,

+1

물론이 프로그램은 순수 DOS 나 그 비슷한 (Win 95 등)에서만 실행된다는 사실을 알고 있습니다. – hirschhornsalz

+0

@drhirsch : 부트 섹터처럼 보입니다 – ninjalj

+0

@drhirsch ... 아니요. . 나는 DOS에서 ASM 코드를 실행하는 사람들을 계속해서 들었지만 DOS가 필요하다는 사실을 연결하지 못했습니다. 저것은 진짜로 동전을 뒤집어 놓습니다. 간단히 말해서, 나는 운영 체제를 만드는 3 년 이상의 긴 과정에 있습니다. 현재 사용되지 않는 코드는 BIOS에 의해로드되는 일련의 프로그램의 일부 였을 것입니다. 위의 프로그램은 BIOS가로드 한 후에 OS가 어떻게 작동하는지 시뮬레이션하고있었습니다. 그러나 DOS가 필요하다는 것을 알았습니다. 그러나 "순수 DOS 나 그와 비슷한 환경에서 실행"한다는 것은 정확히 무엇을 의미합니까? 일부 인터럽트를 사용하여 화면에 인쇄 할 수 있습니다. –

답변

2

는 표준화 된 BIOS가 드라이브에서 CD를 꺼내 중단이있을 나타나지 않습니다. 따라서 기본적으로이 기능을 원할 경우 많은 작업이 필요합니다. ATA 드라이버를 작성하고 원시 명령을 보내 CD 드라이브를 강제로 꺼내야합니다.

이것은 소리보다 훨씬 더 많이 발생합니다. ATA 드라이브를 감지하고 CD 드라이브로 필터링 한 다음 명령을 보내야합니다.

당신은 드라이브 매개 변수를 얻기 위해 OSDev의 ATA articleATAPI article

0

시도 기능 48 시간을 확인해야합니다. 당신이 얻는 것을보십시오. 다른 드라이브 번호 일 수 있습니다. 또는이 확장 기능은 특정 BIOS의 드라이브 유형에 대해 사용 가능/지원되지 않을 수 있습니다.

관련 문제