시스템이 실제로 어떻게 작동하는지에 대해 자세히 알고 싶습니다. 그래서 저는 BIOS가 시작시에로드하는 512byte의 메모리를 가지고 놀고 있습니다. 실제로 추측 할 때 부트 로더라고 부를 수는 없습니다. 어쨌든, 나는 인터럽트 벡터를 대체 할 것이지만 문제는있다. interupt 09h (키보드)를 바꾼 후에는 올바르게 작동하고, 키를 누르면 'Memory messing'이 출력됩니다. 하지만 아무것도. 이후의 모든 키 누르기는 아무 것도하지 않습니다. 내 처리기에서 뭔가를 누락하는 경우 시스템이 충돌하거나 경우 나도 몰라, 여기에 코드입니다 :리얼 모드, 인터럽트 벡터 교체 오류가 발생했습니다.
jmp start
times 100 db 0 ; Cleared space for stack
start:
xor ax, ax
mov ax, start
sub ax, 80
mov sp, ax
mov al, 0x09 ; Interupt number
mov bl, 4
mul bl
mov bx, ax
xor ax, ax
mov es, ax
mov [es:bx], word prints ; My interupt handler
add bx, 2
mov [es:bx], word 0x00
bloader:
jmp bloader
prints:
cli
push ax
push bx
push si
mov si, msg ; Message to print
mov bl, 0x07
mov bh, 0x00
printnb:
lodsb ; Grab byte from message
cmp al, 0 ; End of message
je printf
mov ah, 0x0E
int 0x10 ; Print byte
jmp printnb
printf:
mov al, 0x20
out 0x20, al ; Inform interupt controller interupt has been handled
pop si
pop bx
pop ax
sti
iret ; Interupt return
msg db "Memory messing",0
times 510 - ($ - $$) db 0
dw 0xAA55
이 그것을 고정. 로드에 감사드립니다. – Dave