2011-10-16 3 views
4

내가 부트 로더를 쓰기 위해 노력하고있어하지만 난이 질문에 발견하기 전까지 내 실험의 방법으로도 문제가 해결되지 않았다 : Why doesn't this boot loader code work?NASM 부트 로더 이상한 행동

난 단지 화면에 문자를 쓰기에이 프로그램을 단순화했다합니다.

[ORG 0x7C00] 
[BITS 16] 

realstart: 
    jmp start 
    nop 


start: 
    xor ax,ax 
    mov ds,ax 
    mov es,ax 
    xor bx,bx 
    mov ah, 0x0e 
print: 
    mov al, "A" 
    int 0x10 
end:  
    cli 
    hlt 

    times 510 - ($-$$) db 0 
    dw 0xAA55 

그것은 잘 컴파일,하지만 objdump의 모든 INT 0x10을 명령 없다.

문자열 (this file)을 그대로두면 모두 정상적으로 작동합니다.

어획물은 어디에 있습니까? (Cygwin에서 Win7에 SP1에 NASM 2.08.02-1로 컴파일)

+0

컴파일 대상 : nasm -O0 -f bin bootLoader.asm -o bootLoader.bin – banic

+0

포스트 obj 덤프 덤프. FASM으로 컴파일되고 ndisasm으로 덤프되며 int 10h가 있습니다. –

+0

나는 스크린 샷을 업로드했다. http://s2.photobucket.com/albums/y31/bannyy/NASM%20problem/ Win7 SP1, Cygwin, NASM을 사용하고있다. – banic

답변

0

코드 아무 문제 없을 것 같다. ndisasm으로 코드를 디스 어셈블하면 int 0x10이 누락 된 결과가 나타납니다. 그래서 런타임에 코드를 덤핑하는 것에 대해 이야기 해 보겠습니다. 부트 섹터는 일반적으로 점프 명령 바로 다음에 부트 레코드를 포함합니다 (부트 로더에 미디어의 크기 등에 대해 알려줍니다). 아마도 BIOS가 어떤 이유로 부트 레코드라고 생각하는 것에 중점을 둘 것입니까?

0
Bits 16 
org 0x7c00 
start: 
xor ax,ax 
mov ah,0x0E 
mov al,'A' 
int 10h 
mov al,10h 
int 16h 
int 19h 
hlt 
times 510-($-$$) db 0 
dw 0xAA55 

이 코드를 사용해보십시오. 작동하지 않는 경우 알려주십시오.