2010-06-02 7 views
0

내 자신의 부트 로더를 작성하기로 결정했습니다.CLI가 비디오 메모리에 미치는 영향

qemu가 이미 3로 설정되어 있지만 비디오 모드를 3으로 설정할 수 있었고 비디오 메모리를 직접 변경하여 화면의 첫 번째 줄의 첫 문자에 'A'를 인쇄했습니다.

[org 0x7C00] ;Address BIOS loads the bootloader into 
[bits 16] 

;Set video mode to mode 3 
mov al, 0x03 
mov ah, 0x00 
int 0x10 

mov ax, 0xB800 
mov es, ax 
mov bx, 0 
mov [es:bx], byte 65 
mov [es:bx+1], byte 0x0F 

;cli 

JMP $  ;Infinite loop, hang it here. 

times 510 - ($ - $$) db 0 ;Fill the rest of sector with 0 
dw 0xAA55   ;Add boot signature at the end of bootloader 

주석 처리 된 cli 명령에 유의하십시오. 세미콜론과 세미콜론 만 제거하면 'A'가 더 이상 인쇄되지 않습니다. 나는 IF 플래그를 지우는 것이 메모리에 어떤 영향을 미치는지를 이해하는 방법을 이해하지 못한다. 누군가가 이것에 대해 밝힐 수 있다면 좋을 것입니다.

아, 그리고에 대한 그 가치가 무엇인지, 내가 부트 로더 내가 다른 곳에서 골조있어

nasm -o bl.bin bl.asm 
qemu -fda bl.bin 

를 실행하고 내가 할 수있는만큼을 읽기 위해 사용하는 명령. 누군가가 스택을 설정하는 것에 대해 언급했지만 문제와 관련이 있는지 이해하지 못합니다.

정말 감사드립니다!

+0

다른 방법이 아닌가요? CLI가 그대로 유지되면 'A'가 표시되고 CLI가 주석 처리 된 경우 'A'가 표시되지 않습니까? –

+0

아니, 이쪽으로 돌다. – oadams

답변

0

비디오 카드 하드웨어의 종속성! 일부 비디오 카드는 모든 비디오 모드를 직접 지원하지는 않지만 시뮬레이션 만 수행합니다. 인터럽트를 통해 코드의 내부 부분은 몇 ms마다이 메모리를 그래픽 카드 메모리로 복사해야합니다. 인터럽트를 끄면 그래픽 카드의 내부 비디오 메모리 새로 고침도 꺼집니다. CLI 명령은 모든 소프트웨어 인터럽트를 비활성화하므로 하드웨어 지침 만 표시되므로 BIOS가 올바르게 작동하지 않습니다. CLI 명령은 메모리 또는 IO 포트에 대한 읽기 또는 쓰기 동기화에만 사용할 수 있습니다. 내 대답에 관해서는 CLI 명령을 실행하기 전에 약 6ms 동안 잠깐 멈출 수 있으며 문자가 표시됩니다.

+0

사용중인 qemu에 문제가 있음을 알 수 있습니다. – oadams

+0

에뮬레이트 된 코드에서 인터럽트를 끄는 것은 인터럽트를 실제로 돌리는 것과 같은 것은 아닙니다. qemu 소프트웨어는 이것을 가상화하고 인터럽트를 정상적으로 처리해야하므로 화면을 업데이트 할 수 있습니다. –

+0

CLI 명령이이 의심에 대답하기 전에 몇 ms 전에 잠시 멈췄습니다. –

관련 문제