test명령은 내부적으로 and명령과 마찬가지거든요.
( cmp명령은 내부적으로 sub명령과 마찬가지죠. )
0fffh와 and해서 0이 나와야 아래로 내려가는겁니다.
한마디로 ax가 0000h, 1000h, 2000h, .. 이런 경우만 통과죠.
말 그대로 64K 경계에 있나 테스트하는거라고 이해하시면 될듯합니다.
: 짐 리눅스 커널 0.01 분석하는데요
:
: boot.s파일에서
:
: | we want to load the system (at 0x10000)
:
: mov ax,#SYSSEG
: mov es,ax | segment of 0x010000
: call read_it
: call kill_motor
: 여기서 call read_it를 했을때요
:
:
: read_it:
: mov ax,es
: test ax,#0x0fff
: die: jne die | es must be at 64kB boundary
: xor bx,bx | bx is starting address within segment
: rp_read:
: ~~~~~~~~~~~~중략~~~~~~~~~~~~~~~~~~
:
: read_it: 및에 mov ax,es를 해서 ax에 0x1000이 들어가는거까지
: 알겠는데 왜 밑에서 test ax,#0xfff를 하는지 모르겠더라구요
: 바로 밑 라인 보시면 아실듯 ax가 0xfff와 같지 않다면
: 무조건 무한루프인데...흐 ㅡㅡ;
: 고수님들의 가르침 부탁드리겠습니다. 꾸벅^^
:
: --
: Real Freedom--The more pure, the more fragile ..