>> Edit article
이름
제목
패스워드
바보처럼..zf가 값이 0일때 1이 된다는 그 사실을 까먹은거 같습니다.. 흐...커널분석을 떠나 어셈부터 새로하는게 ㅡ_ㅡ : : 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 ..--Real Freedom
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved