[질문] A20 Gate on/off 테스트 어셈블리 코드 관련
글쓴이: hoongwan / 작성시간: 화, 2011/02/08 - 4:51오후
A20_TEST_LOOPS equ 32
A20_TEST_ADDR equ 4*0x80
a20_test:
push cx
push ax
xor cx, cx
mov fs, cx
dec cx
mov gs, cx
mov cx, A20_TEST_LOOPS
mov ax, word [fs:A20_TEST_ADDR]
push ax
a20_test_wait:
inc ax
mov word [fs:A20_TEST_ADDR], ax
call delay
cmp ax, word [gs:A20_TEST_ADDR]
loop a20_test_wait
pop ax
pop cx
ret
delay:
out 0x80, al
ret
위 소스는 a20 게이트가 켜져있는지 아닌지 확인하는 소스입니다. 만들면서 배우는 OS 커널의 구조와 원리에서 저자가 리눅스 커널 버전 2.4.20에서 setup.S에 포함된 루틴을 nasm 형식으로 변환 했다고 합니다.
여기서 loop를 32번 도는데 왜 32번 도는 거죠? 어차피 마지막 결과에 대한 값만 return되는거 아닌가요?
그리고 out 0x80, al 이 어떻게 딜레이를 주는 건지요?..
그리고 이 코드 작성자가 특별히 4*0x80을 테스트 주소로 쓴 이유가 있을까요?
Forums:
post code
제 기억이 맞다면 그건 PC BIOS의 dignostics를 위한 post code의 출력를 위한 address일 것입니다
http://en.wikipedia.org/wiki/Power-on_self-test
setup.S
리눅스 커널에는 생각보다 주석이 친절하게 달려있네요..
마지막 질문은 setup.S 주석에 이유가 나와있네요.. 인터럽트 0x80 벡터 인데 여기가 안전하다고 그러네요..
...
댓글 달기