>  기사  >  백엔드 개발  >  x86 어셈블리의 \'lock\' 명령이 버스를 무기한 유지합니까?

x86 어셈블리의 \'lock\' 명령이 버스를 무기한 유지합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 21:06:31262검색

 Does the

x86 어셈블리의 "잠금" 명령어 이해

x86 어셈블리의 "잠금" 명령어는 후속 명령어에 대해 버스의 독점적 소유권을 적용하는 접두사입니다. 이렇게 하면 CPU가 해당 명령 기간 동안 캐시 라인을 완벽하게 제어할 수 있습니다.

버스 잠금 비활성화

일반적인 이해와는 달리 "lock" 접두사는 CPU 잠금을 유발하지 않습니다. 버스는 무한정. 잠금은 후속 명령 실행 후 해제됩니다. 이를 통해 꼭 필요한 경우에만 버스를 잠가서 CPU가 최적의 성능을 유지할 수 있습니다.

"잠금"을 사용한 덧셈 구현

제공하신 코드 조각은 다음에서 긴 단어의 원자적 증분을 구현합니다. ecx 레지스터의 값으로 지정된 메모리 위치:

  1. movl 4(%esp), �x: 증가할 변수의 주소를 ecx 레지스터에 복사합니다.
  2. incl(�x): ecx 레지스터에 저장된 주소의 긴 단어를 원자적으로 증가시킵니다.
  3. mov $0,�x: eax 레지스터를 0으로 설정합니다.
  4. setne %al: 변수의 새 값이 0이 아닌 경우(증가 작업이 성공했음을 나타냄) al 레지스터의 값을 1로 설정합니다.

결과적으로 변수는 다음과 같이 원자적으로 증가됩니다. 1이고 eax 레지스터는 새 값이 0이면 0으로 설정되고 그렇지 않으면 1로 설정됩니다. 이 작업은 추가가 아닌 증가라는 점에 유의하세요.

위 내용은 x86 어셈블리의 \'lock\' 명령이 버스를 무기한 유지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.