저는 코드와 운영체제가 실제로 어떻게 작동하는지 배우기 위해 어셈블리를 가르치기 시작했습니다. 내가 알기에, 은 프로세서에게 foo
라벨이있는 라인으로 가도록 지시합니다. 그러나 (이 정말를 호출 할 수 있다면!) 가장 기본적인 OS는이 코드를 알고있는 것처럼, 프로세서 라인 1을보고하고 foo
것을 기억어셈블리에서 jmps는 어떻게 작동합니까? (OS 개발)
foo: ; label foo
jmp foo ; Go to foo
times 512-($-$$) db 0 ; Fill remaining bytes with 0's
... 다음과 같습니다. 그런 다음 2 행으로 이동하여 foo
으로 이동합니다. 그리고 빈 공간을 채우기 위해 3 행에 도달하지 마십시오.
무한 루프가 아닌 이유는 무엇입니까? 컴파일시 VirtualBox에서 잘 실행됩니다 (여기에 올바른 단어를 사용합니까?) .iso 파일에 포함됩니다.
'jmp'는 간단히 "여기에서 X 바이트를 가져옵니다."입니다. 그것은 당신이 말한 것과 비슷하지만 물론 라인이 아니라 주소를 지정합니다. 줄의 관점에서 "여기에서 X 줄로 점프"하고 "jmp foo"는 "여기에서 점프 -1 줄"이 될 것입니다. 물론 이것은 유추 일뿐입니다. –
@MargaretBloom 맞습니다. 그러나 세 번째 줄은 어떻게 실행 되었습니까? ? – seadoggie01
** **는 ** 무한 루프이며 세 번째 줄은 명령어가 아니며 섹터의 나머지 부분을 0으로 채우는 어셈블러 지시자입니다. 어셈블하는 동안 어셈블러에 의해 "실행"됩니다. – Jester