메모리의 0번지에 섹터를 읽어오려고 하는데 ..

Reper의 이미지

load_setup:
	mov ax, SETUP_SEG
	mov es, ax
	xor bx, bx
 
	mov ah, 2			; copy data to es:bx from disk.
	mov al, 1			; read a sector.
	mov ch, 0			; cylinder 0
	mov cl, 2			; read data since sector 2.
	mov dh, 0			; Head  = 0
	mov dl, 0			; Drive = 0
	int 0x13			; BIOS call.
 
	jc load_setup

위의 코드는 제가 작성한 부트스트랩의 일부입니다. SETUP_SEG를 여러 값으로 바꿔가면서 해보았는데요..

0x0000 : 실패
0x0010 : 성공
0x0020 : 실패
0x0030 : 실패
0x0040 : 실패
0x0050 : 성공

이네요 .. 왜 이런 결과가 나오는건가요 .. 쓸데없는 고민 같긴 하지만 .. 이유를 모르니 너무 답답하네요 ..

Necromancer의 이미지

다운 안된게 신기하네요. 메모리 주소 0~0x3ff까지는 interrupt vector table 입니다. int 명령 실행할때 어디로 넘어갈지 기록해둔 주소들이 있다고 보시면 됩니다. 함부로 막 쓰면 안됩니다.

여기 외에도 함부로 막 써서는 안되는 메모리 주소들이 몇군데 있으니 알아보세요.

Written By the Black Knight of Destruction

Reper의 이미지

그렇군요. 감사합니다 !