1
나는 문제는 그 INT 화재 한 번만입니다 키보드 인터럽트 핸들러 화재는 한 번만
아래처럼인터럽트 정의와 중단은 0x09 교체합니다.
키를 여러 번 눌러도 한 번만 실행됩니다.
나는 Virtualbox에서 테스트를 마쳤습니다.
org 0x7c00
jmp start
handler:
jmp handler_code
cur_x:
db 0
handler_code:
mov bh,0
mov dh, 5
mov dl, [cur_x]
mov ah, 2
int 0x10
mov al, 'A'
mov cx, 1
mov bh, 0
mov ah, 0x0a
int 0x10
add byte [cur_x], 1
iret
start:
push cs
pop ds
push 0
pop es
mov bx, 36
mov word [es:bx], handler
mov word [es:bx+2], cs
jmp $
times 510 - ($-$$) db 0
db 0x55
db 0xaa
times 1474560 - ($-$$) db 0
코드가 0x7c00에로드되었습니다. 시작 부분으로 건너 뜁니다. 시작 부분에 인터럽트 교체 루틴이 있습니다. 현재 주소로 jmp하므로 영원히 반복됩니다. 아무것도하지 않는 영원한 루프라도 키를 눌러 핸들러를 작동시킬 수 있습니다. 키를 누르면 발사됩니다. 그러나 다음 번에는 아무 일도 없었습니다.
이상한 건 입니다. 다음 코드를 jmp $ 위에 올리면 인터럽트가 5 번 발생합니다. 그래서 방해 자체가 잘못되지 않은 것처럼 보입니다.
int 9
int 9
int 9
int 9
int 9
단지 참고 사항 : 나는 당신에게 주어진대로 코드에서'cs '를 사용할 때 조심할 것입니다. 명시 적으로'org 0x7c00'을 사용하기 때문에, 다른 것을하기 전에'cs'를 0으로 설정해야합니다. 특정 설정에서는 문제가되지 않지만 다른 설정 (즉, 다른 가상 컴퓨터)에서는 문제가 될 수 있습니다. 또한 문제는 원래 'int 9'루틴이 수행하지 않는 작업, 즉 키를 확인하는 것입니다. –
인터럽트는 어디에서 인정합니까? –
'인터럽트를 확인합니다.' 나는 이해하지 못한다. – Taeyun