나는 NASM이 나에게 어떤 오류도주지 않았기 때문에 나는 지금 몇 주 동안 붙어 있었고 어디에서 잘못 될지 모른다. 주석은 주석 때문에 꽤 자명하다. NASM 어셈블리에서 BIOS int 13h를 사용하여 디스크에서 커널을로드하는 방법은 무엇입니까?
이
은 BIOS에서로드되는 코드입니다;--------------------------------------------
; 'boot.asm'
; loaded from BIOS
[org 0x7C00]
[bits 16]
;--------------------------------------------
main:
mov ah, 0x0E ; print function
mov al, '.' ; ascii char
int 0x10 ; IO int
resetdisk:
mov ah, 0x00 ; reset function
mov dl, 0x00 ; drive
int 0x13 ; disk int
jc resetdisk
readdisk:
mov bx, 0x8000 ; segment
mov es, bx
mov bx, 0x0000 ; offset
mov ah, 0x02 ; read function
mov al, 0x03 ; sectors
mov ch, 0x00 ; cylinder
mov cl, 0x02 ; sector
mov dh, 0x00 ; head
mov dl, 0x00 ; drive
int 0x13 ; disk int
jc readdisk
jmp [es:bx] ; buffer
;--------------------------------------------
times 510 - ($ - $$) db 0x00
db 0x55, 0xAA
이 있어야 코드 (그러나입니다) 어떤 도움이 많이 주시면 감사하겠습니다
;--------------------------------------------
; 'load.asm'
; loaded from 'boot.asm'
[org 0x8000]
[bits 16]
;--------------------------------------------
main:
mov ah, 0x0E ; print function
mov al, '.' ; ascii char
int 0x10 ; IO int
jmp $ ; hang
로드 .
패트릭
제발 틀렸어.하지만'jmp $'대신에'cli'로 인터럽트를 지우고'hlt'로하면 CPU를 멈추게 하는게 더 나을 것입니다. 이 방법을 사용하면 많은 CPU 시간을 소비하지 않아도됩니다. – kaneda
최소 작동 가스 예 : https://github.com/cirosantilli/x86-bare-metal-examples/blob/1f6af9021283dc01f2247efbb6aa9217363fbf07/bios_disk_load.S –