나는 x86
구문을 배우고 있습니다.명령어가 무엇을하는지 이해하십시오.
나는 그것이 무엇을해야하지 않는 것이 명령을 우연히 발견했습니다
cmpl $0x0,%cs:0x6574
나는 cmp
그냥 차이를 비교하고 플래그를 설정 알고있다. 부호없는 값이 비교 중임을 나타내는 l
.
내 질문은 :
우리는 무엇을 비교합니까? 0x0
의 값과 어떤 값 %cs:0x6574
?
cs 레지스터에 주소가 들어 있습니다. 0x6574를 추가하고 값을 추출해야합니까? 다음과 같습니다.
mem[cs+0x6575]
미리 감사드립니다.
될 것입니다. 이 OS 개발과 관련이있을 수 있습니까? 특히 JOS 관련 실제 코드를보고 계십니까? –
@MichaelPetch nice! 예. OSE, 나는 JOS 부트 스트랩 코드를보고있다. –
CMPL 명령이 사용되기 바로 전에'ljmp $ 0xf000, $ 0xe05b'이 수행됩니다. 그 긴 점프는 CS를 $ 0xf000 및 IP를 $ 0xe05b로 설정하는 효과가 있습니다. '% cs : 0x6574'는 (0xf000) * 16 + 0x6574가됩니다. 그것이 실제 주소 0xf6574입니다. 그 위치에 무엇이 있는지 알기 위해 OSE/JOS 코드를 보지 않았지만 실제 주소 0xf6574의 긴 단어 (4 바이트 값)와 값 0을 비교하는 것이 좋습니다. –